{"id":81884,"date":"2020-05-17T13:42:18","date_gmt":"2020-05-17T11:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity"},"modified":"2020-05-17T13:42:18","modified_gmt":"2020-05-17T11:42:18","slug":"bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","title":{"rendered":"Beveiliging en databases: waar je rekening mee moet houden bij het selecteren van beschermingsmiddelen.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1><img decoding=\"async\" alt=\"Beveiliging en databases: waar je rekening mee moet houden bij het selecteren van beschermingsmiddelen.\" src=\"\/wp-content\/uploads\/2020\/05\/ac49253838e36336af127d71394139d8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/h1>\n<p>\nMijn naam is Denis Rozhkov, ik ben de hoofdontwikkelaar bij het bedrijf 'Gazinformservice', in het productteam. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\">Jatoba<\/a><\/noindex>. Wetgeving en bedrijfsnormen stellen bepaalde vereisten aan de beveiliging van gegevensopslag. Niemand wil dat derden toegang krijgen tot vertrouwelijke informatie, daarom zijn de volgende vragen belangrijk voor elk project: identificatie en authenticatie, toegangsbeheer tot gegevens, waarborging van de integriteit van de informatie in het systeem, registratie van beveiligingsgebeurtenissen. Daarom wil ik enkele interessante punten over de beveiliging van databases bespreken. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDit artikel is voorbereid op basis van een presentatie op <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup,<\/a><\/noindex> georganiseerd door <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Als je niet wilt lezen, kun je kijken:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"n-54j9FHaMU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/n-54j9FHaMU\/hqdefault.jpg\" alt=\"Video afspelen\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nHet artikel bestaat uit drie delen:<\/p>\n<ul>\n<li>Hoe verbindingen te beschermen.<\/li>\n<li>Wat is audit van acties en hoe vast te leggen wat er met de database en de verbinding ermee gebeurt.<\/li>\n<li>Hoe gegevens in de database zelf te beschermen en welke technologie\u00ebn daarvoor beschikbaar zijn.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Beveiliging en databases: waar je rekening mee moet houden bij het selecteren van beschermingsmiddelen.\" src=\"\/wp-content\/uploads\/2020\/05\/fbdca7f4a925b9ceb78de06c6e245b23.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Drie componenten van databasebeveiliging: bescherming van verbindingen, audit van acties en gegevensbescherming.<\/i><\/p>\n<h2>Bescherming van verbindingen<\/h2>\n<p>\nJe kunt verbinding maken met de database zowel rechtstreeks als indirect via webapplicaties. Over het algemeen interacteert de eindgebruiker uit het bedrijfsleven, dat wil zeggen de persoon die met de database werkt, niet rechtstreeks met deze.<\/p>\n<p>Voordat we over de bescherming van verbindingen praten, moeten we belangrijke vragen beantwoorden die van invloed zijn op hoe beveiligingsmaatregelen worden opgesteld:<\/p>\n<ul>\n<li>is \u00e9\u00e9n zakelijke gebruiker gelijk aan \u00e9\u00e9n gebruiker van de database;<\/li>\n<li>wordt toegang tot gegevens van de database uitsluitend via de API verleend die jij beheert, of is er directe toegang tot de tabellen;<\/li>\n<li>is de database toegewezen aan een afzonderlijk beveiligd segment en wie en hoe werkt ermee samen;<\/li>\n<li>wordt er gebruikgemaakt van pooling\/proxy en tussentijdse lagen die informatie kunnen wijzigen over hoe de verbinding is opgebouwd en wie de database gebruikt.<\/li>\n<\/ul>\n<p>\nLaten we nu kijken welke tools we kunnen gebruiken voor de bescherming van verbindingen:<\/p>\n<ol>\n<li>Gebruik database firewall-oplossingen. Een extra laag van beveiliging verhoogt in elk geval de transparantie van wat er in de database gebeurt en in het beste geval kun je extra gegevensbescherming garanderen.<\/li>\n<li>Gebruik wachtwoordbeleid. De implementatie ervan hangt af van hoe uw architectuur is opgebouwd. In ieder geval is \u00e9\u00e9n wachtwoord in het configuratiebestand van de webtoepassing die zich met de DBMS verbindt, niet voldoende voor bescherming. Er zijn verschillende DBMS-tools beschikbaar die kunnen controleren of gebruiker en wachtwoord vernieuwing vereisen.\n<p>Lees meer over de functies voor gebruikersbeoordeling. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/data-safe\/doc\/user-assessment-reports.html\">hier<\/a><\/noindex>, en u kunt ook meer te weten komen over MS SQL Vulnerability Assessment. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/security\/sql-vulnerability-assessment?view=sql-server-ver15\">here<\/a><\/noindex>.\u00a0<\/li>\n<li>Verrijk de context van de sessie met de benodigde informatie. Als de sessie niet transparant is, begrijpt u niet wie binnen de DBMS werkt; het is mogelijk om tijdens de uitgevoerde operatie informatie toe te voegen over wie, wat en waarom iets doet. Deze informatie kan worden bekeken in de audit.<\/li>\n<li>Configureer SSL als u geen netwerksegmentatie heeft tussen de DBMS en eindgebruikers, en als deze niet in een aparte VLAN is. In dergelijke gevallen is het essentieel om de verbinding tussen de consument en de DBMS te beveiligen. Beschermingsinstrumenten zijn ook beschikbaar onder open-source.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Hoe be\u00efnvloedt dit de prestaties van de DBMS?<\/h3>\n<p>\nLaten we aan de hand van PostgreSQL bekijken hoe SSL de CPU-belasting, wachttijden en de vermindering van TPS be\u00efnvloedt en of er niet te veel middelen verloren gaan door het in te schakelen.<\/p>\n<p>We belasten PostgreSQL met pgbench \u2014 een eenvoudig programma om prestatietests uit te voeren. Het voert herhaaldelijk een reeks opdrachten uit, mogelijk in parallelle databasesessies, en berekent vervolgens de gemiddelde transactiesnelheid.<\/p>\n<p><strong>Test 1 zonder SSL en met gebruik van SSL.<\/strong> \u2014 de verbinding wordt bij elke transactie tot stand gebracht:<\/p>\n<pre><code class=\"plaintext\">pgbench.exe --connect -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres sslmode=require\nsslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key\"<\/code><\/pre>\n<p>\n<strong>vs<\/strong><\/p>\n<pre><code class=\"plaintext\">pgbench.exe --connect -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres\"<\/code><\/pre>\n<p>\n<strong>Test 2 zonder SSL en met gebruik van SSL.<\/strong> \u2014 alle transacties worden uitgevoerd in \u00e9\u00e9n verbinding:<\/p>\n<pre><code class=\"plaintext\">pgbench.exe -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres sslmode=require\nsslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key\"<\/code><\/pre>\n<p>\n<strong>vs<\/strong><\/p>\n<pre><code class=\"plaintext\">pgbench.exe -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres\"<\/code><\/pre>\n<p>\n<strong>Overige instellingen:<\/strong>:<\/p>\n<pre><code class=\"plaintext\">schalingsfactor: 1\nquery mode: eenvoudig\naantal clients: 10\naantal threads: 1\naantal transacties per client: 5000\naantal daadwerkelijk verwerkte transacties: 50000\/50000<\/code><\/pre>\n<p>\n<strong>Testresultaten<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>GEEN SSL<\/strong><br \/>\n<strong>SSL<\/strong><\/p>\n<p><strong>Verbinding wordt bij elke transactie tot stand gebracht.<\/strong><\/p>\n<p>gemiddelde latentie<br \/>\n171,915 ms<br \/>\n187,695 ms<\/p>\n<p>tps inclusief het tot stand brengen van verbindingen.<br \/>\n58.168112<br \/>\n53.278062<\/p>\n<p>tps exclusief het tot stand brengen van verbindingen.<br \/>\n64.084546<br \/>\n58.725846<\/p>\n<p>CPU<br \/>\n24%<br \/>\n28%<\/p>\n<p><strong>Alle transacties worden uitgevoerd in \u00e9\u00e9n verbinding.<\/strong><\/p>\n<p>gemiddelde latentie<br \/>\n6,722 ms<br \/>\n6,342 ms<\/p>\n<p>tps inclusief het tot stand brengen van verbindingen.<br \/>\n1587.657278<br \/>\n1576.792883<\/p>\n<p>tps exclusief het tot stand brengen van verbindingen.<br \/>\n1588.380574<br \/>\n1577.694766<\/p>\n<p>CPU<br \/>\n17%<br \/>\n21%<\/p>\n<p>\nBij lichte belasting is de invloed van SSL vergelijkbaar met de meetfout. Wanneer de hoeveelheid verzonden gegevens echter zeer groot is, kan de situatie anders zijn. Als we voor elke transactie een aparte verbinding opzetten (wat zelden voorkomt, meestal delen gebruikers de verbinding), heb je veel verbindingen\/verbindingen loskoppelen, dan kan de invloed iets groter zijn. Dat wil zeggen, er kunnen risico's zijn voor prestaties, maar het verschil is niet zo groot dat je geen beveiliging moet gebruiken.<\/p>\n<p>Let op: er is een groot verschil wanneer je werkt in sessiemodus of in verschillende sessies. Dit is logisch: het kost middelen om elke verbinding te cre\u00ebren.<\/p>\n<p>We hadden een geval waarin we Zabbix in trust-modus verbonden, dat wil zeggen dat we md5 niet controleerden en er geen authenticatie nodig was. Toen vroeg de klant om md5-authenticatie in te schakelen. Dit leidde tot een hoge CPU-belasting en de prestaties daalden. We zijn op zoek gegaan naar optimalisatiemogelijkheden. Een van de mogelijke oplossingen voor het probleem is om netwerkbeperkingen toe te passen, aparte VLAN's voor de DBMS te maken, instellingen toe te voegen zodat het duidelijk is wie en van waar verbinding maakt en de authenticatie te verwijderen. Daarnaast kunnen we ook de authentificatie-instellingen optimaliseren om de kosten van inschakeling van authenticatie te verlagen, maar over het algemeen heeft het gebruik van verschillende authenticatiemethoden invloed op de prestaties en moeten deze factoren in aanmerking worden genomen bij het ontwerpen van servercapaciteit (hardware) voor de DBMS.<\/p>\n<p>Conclusie: in sommige oplossingen kunnen zelfs kleine nuances in authenticatie een grote impact hebben op het project, en het is problematisch wanneer dit alleen duidelijk wordt bij de implementatie in productie.<\/p>\n<h2>Activiteitenaudit<\/h2>\n<p>\nAudit kan niet alleen voor de DBMS zijn. Audit is het verkrijgen van informatie over wat er op verschillende segmenten gebeurt. Dit kan zowel een database-firewall zijn als een besturingssysteem waarop de DBMS is gebouwd.<\/p>\n<p>Bij commerci\u00eble Enterprise-niveau DBMS is auditing goed geregeld, maar bij open source is dat niet altijd het geval. Dit is wat er in PostgreSQL beschikbaar is:<\/p>\n<ul>\n<li>default log - ingebouwde logging;<\/li>\n<li>uitbreidingen: pgaudit - als de standaardlogging niet voldoende is, kun je gebruikmaken van aparte instellingen die een deel van de taken oplossen.<\/li>\n<\/ul>\n<p>\n<b>Aanvulling op de presentatie in de video:<\/b><\/p>\n<p>De basisregistratie van operators kan worden verzorgd met behulp van de standaard logtool met log_statement = all.<\/p>\n<p>Dit is geschikt voor monitoring en andere soorten gebruik, maar biedt niet het detailniveau dat meestal nodig is voor een audit.<\/p>\n<p>Het is niet voldoende om alleen een lijst van alle handelingen met de database te hebben.<\/p>\n<p>Er moet ook de mogelijkheid zijn om specifieke uitspraken te vinden die interessant zijn voor de auditor.<\/p>\n<p>De standaard logtool toont wat de gebruiker heeft opgevraagd, terwijl pgAudit zich richt op de details van wat er is gebeurd toen de database de aanvraag uitvoerde.<\/p>\n<p>Bijvoorbeeld, een auditor wil misschien bevestigen dat een specifieke tabel is aangemaakt in een gedocumenteerd onderhoudsvenster.<\/p>\n<p>Dit lijkt een eenvoudige taak voor basisauditing en grep, maar wat als je iets soortgelijks tegenkomt (bewust verwarrend) voorbeeld:<\/p>\n<p>DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>De standaard logging zal je dit geven:<\/p>\n<p>LOG: statement: DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Het lijkt erop dat het enige kennis van de code kan vereisen om de relevante tabel te vinden wanneer tabellen dynamisch worden aangemaakt.<\/p>\n<p>Dit is niet ideaal, aangezien het beter zou zijn om gewoon op de naam van de tabel te zoeken.<\/p>\n<p>Hier komt pgAudit van pas.<\/p>\n<p>Voor dezelfde invoer zal het deze output in de log genereren:<\/p>\n<p>AUDIT: SESSION,33,1,FUNCTION,DO,,,\"DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<br \/>\nAUDIT: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)<\/p>\n<p>Niet alleen het DO-blok wordt geregistreerd, maar ook de volledige CREATE TABLE tekst met type operator, type object en volledige naam, wat het zoeken vergemakkelijkt.<\/p>\n<p>Bij het loggen van SELECT- en DML-operators kan pgAudit worden geconfigureerd om een afzonderlijke registratie voor elke relatie die in de operator wordt verwezen vast te leggen.<\/p>\n<p>Er is geen syntactische analyse nodig om alle operatoren te vinden die betrekking hebben op een specifieke tabel (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgaudit\/pgaudit\/blob\/master\/README.md\">*<\/a><\/noindex>)\u00bb.<\/p>\n<h3>Hoe be\u00efnvloedt dit de prestaties van de DBMS?<\/h3>\n<p>\nLaten we testen met het inschakelen van volledige auditing en kijken wat het effect op de prestaties van PostgreSQL is. We zullen de maximale DB-logging inschakelen voor alle parameters.<\/p>\n<p>We veranderen bijna niets in het configuratiebestand, belangrijk - we schakelen de debug5-modus in om zoveel mogelijk informatie te krijgen.<\/p>\n<p>postgresql.conf<\/p>\n<p>log_destination = 'stderr'<br \/>\nlogging_collector = on<br \/>\nlog_truncate_on_rotation = on<br \/>\nlog_rotation_age = 1d<br \/>\nlog_rotation_size = 10MB<br \/>\nlog_min_messages = <strong>debug5<\/strong><br \/>\nlog_min_error_statement = <strong>debug5<\/strong><br \/>\nlog_min_duration_statement = 0<br \/>\ndebug_print_parse = on<br \/>\ndebug_print_rewritten = on<br \/>\ndebug_print_plan = on<br \/>\ndebug_pretty_print = aan<br \/>\nlog_checkpoints = aan<br \/>\nlog_connections = aan<br \/>\nlog_disconnections = aan<br \/>\nlog_duration = aan<br \/>\nlog_hostname = aan<br \/>\nlog_lock_waits = aan<br \/>\nlog_replication_commands = aan<br \/>\nlog_temp_files = 0<br \/>\nlog_timezone = 'Europe\/Moscow'<\/p>\n<p>\nOp de PostgreSQL DB met parameters 1 CPU, 2,8 GHz, 2 GB RAM, 40 GB HDD voeren we drie belastingstests uit met de volgende commando's:<\/p>\n<pre><code class=\"plaintext\">$ pgbench -p 3389 -U postgres -i -s 150 benchmark\n$ pgbench -p 3389 -U postgres -c 50 -j 2 -P 60 -T 600 benchmark\n$ pgbench -p 3389 -U postgres -c 150 -j 2 -P 60 -T 600 benchmark<\/code><\/pre>\n<p>\n<strong>Testresultaten:<\/strong><\/p>\n<p><strong>Zonder logging<\/strong><br \/>\n<strong>Met logging<\/strong><\/p>\n<p>Eindtijd voor het vullen van de DB<br \/>\n43,74 sec<br \/>\n53,23 sec<\/p>\n<p>RAM<br \/>\n24%<br \/>\n40%<\/p>\n<p>CPU<br \/>\n72%<br \/>\n91%<\/p>\n<p><strong>Test 1 (50 connecties)<\/strong><\/p>\n<p>Aantal transacties in 10 minuten<br \/>\n74169<br \/>\n32445<\/p>\n<p>Transacties\/sec<br \/>\n123<br \/>\n54<\/p>\n<p>Gemiddelde latentie<br \/>\n405 ms<br \/>\n925 ms<\/p>\n<p><strong>Test 2 (150 connecties bij 100 mogelijke)<\/strong><\/p>\n<p>Aantal transacties in 10 minuten<br \/>\n81727<br \/>\n31429<\/p>\n<p>Transacties\/sec<br \/>\n136<br \/>\n52<\/p>\n<p>Gemiddelde latentie<br \/>\n550 ms<br \/>\n1432 ms<\/p>\n<p><strong>Over de groottes<\/strong><\/p>\n<p>Grootte van de DB<br \/>\n2251 MB<br \/>\n2262 MB<\/p>\n<p>Grootte van de DB-logs<br \/>\n0 MB<br \/>\n4587 MB<\/p>\n<p>\nConcluderend: een volledige audit is niet zo goed. De gegevens van de audit zullen qua volume gelijk zijn aan de gegevens in de database zelf, of zelfs meer. Dergelijke omvangrijke logging die wordt gegenereerd bij het werken met een DB, is een veelvoorkomend probleem in productie.<\/p>\n<p>Laten we naar andere parameters kijken:<\/p>\n<ul>\n<li>De snelheid verandert niet veel: zonder logging \u2014 43,74 sec, met logging \u2014 53,23 sec.<\/li>\n<li>De prestaties op RAM en CPU zullen dalen, omdat er een bestand met audits moet worden aangemaakt. Dit is ook merkbaar in productie.<\/li>\n<\/ul>\n<p>\nNatuurlijk zullen de cijfers iets verslechteren met een toenemend aantal connecties.<\/p>\n<p>In bedrijven met audits is het nog moeilijker:<\/p>\n<ul>\n<li>veel gegevens;<\/li>\n<li>de audit is niet alleen nodig via syslog in SIEM, maar ook in bestanden: stel dat er iets met syslog gebeurt, er moet een bestand dicht bij de database zijn waarin de gegevens worden opgeslagen;<\/li>\n<li>voor de audit is een aparte schijf nodig om I\/O op de schijven niet te overbelasten, aangezien deze veel ruimte in beslag neemt;<\/li>\n<li>Het komt voor dat medewerkers van informatiebeveiliging overal de normen eisen, zij vragen om gecertificeerde identificatie.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Beperkingen op de toegang tot gegevens<\/h2>\n<p>\nLaten we kijken naar de technologie\u00ebn die worden gebruikt voor de bescherming van gegevens en de toegang tot deze gegevens in commerci\u00eble databases en open source.<\/p>\n<p>Wat in het algemeen kan worden gebruikt:<\/p>\n<ol>\n<li>Encryptie en obfuscatietechnieken voor procedures en functies (Wrapping) \u2014 dat wil zeggen, afzonderlijke tools en utiliteiten die leesbare code onleesbaar maken. Het is echter niet mogelijk om deze nadien te wijzigen of terug te refactoren. Deze aanpak is soms noodzakelijk, vooral aan de DB-zijde \u2014 de logica van licentiebeperkingen of autorisatielogica wordt gecodeerd op procedure- en functie-niveau.<\/li>\n<li>Rijbeperkingen (RLS) houden in dat verschillende gebruikers dezelfde tabel zien, maar verschillende rijen daarin, wat betekent dat sommige gegevens niet zichtbaar mogen zijn op het rijniveau.<\/li>\n<li>Gegevensmaskering (Masking) betekent dat gebruikers in \u00e9\u00e9n kolom van de tabel ofwel de gegevens zien, of alleen sterretjes, wat inhoudt dat voor bepaalde gebruikers de informatie wordt afgeschermd. De technologie bepaalt aan welke gebruiker welke gegevens worden getoond, rekening houdend met het toegangsniveau.<\/li>\n<li>Toegangsbeperking voor Security DBA\/Application DBA\/DBA betreft voornamelijk het beperken van de toegang tot de database zelf, waardoor beveiligingsmedewerkers kunnen worden gescheiden van databasebeheerders en applicatiebeheerders. In open source zijn er niet veel van deze technologie\u00ebn, maar commerci\u00eble databases hebben er voldoende. Ze zijn nodig wanneer er veel gebruikers zijn met toegang tot de servers.<\/li>\n<li>Beperking van de toegang tot bestanden op het niveau van het besturingssysteem. Rechten en toegangsprivileges kunnen worden verleend voor mappen, zodat elke beheerder alleen toegang heeft tot de relevante gegevens.<\/li>\n<li>Mandaattoegang en geheugenreiniging worden zelden toegepast.<\/li>\n<li>End-to-end encryptie op de database betekent client-side encryptie met sleutelbeheer aan de serverzijde.<\/li>\n<li>Gegevensencryptie. Bijvoorbeeld kolommenencryptie - wanneer u een mechanisme gebruikt dat een specifieke kolom van de database versleutelt.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Hoe be\u00efnvloedt dit de prestaties van de database?<\/h3>\n<p>\nKijk bijvoorbeeld naar kolommencryptie in PostgreSQL. Daar is er de pgcrypto-module die het mogelijk maakt om geselecteerde velden versleuteld op te slaan. Dit is nuttig wanneer alleen bepaalde gegevens waardevol zijn. Om de versleutelde velden te lezen, stuurt de client de decryptiesleutel, de server ontsleutelt de gegevens en geeft ze aan de client. Zonder de sleutel kan niemand iets met uw gegevens doen.<\/p>\n<p><strong>Laten we een test uitvoeren met pgcrypto.<\/strong>. We cre\u00ebren een tabel met versleutelde gegevens en een tabel met gewone gegevens. Hieronder staan de commando's voor het maken van de tabellen, het eerste commando is nuttig - om de extensie met database-registratie te maken:<\/p>\n<pre><code class=\"plaintext\">CREATE EXTENSION pgcrypto;\nCREATE TABLE t1 (id integer, text1 text, text2 text);\nCREATE TABLE t2 (id integer, text1 bytea, text2 bytea);\nINSERT INTO t1 (id, text1, text2)\nVALUES (generate_series(1,10000000), generate_series(1,10000000)::text, generate_series(1,10000000)::text);\nINSERT INTO t2 (id, text1, text2) VALUES (\ngenerate_series(1,10000000),\nencrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'),\nencrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'));<\/code><\/pre>\n<p>\nLaten we nu proberen om uit elke tabel gegevens te extraheren en kijken naar de uitvoeringstijden.<\/p>\n<p><strong>Extractie uit de tabel zonder versleuteling<\/strong>:<\/p>\n<pre><code class=\"plaintext\">psql -c \"timing\" -c \"select * from t1 limit 1000;\" \"host=192.168.220.129 dbname=taskdb\nuser=postgres sslmode=disable\" &gt; 1.txt<\/code><\/pre>\n<p>\nDe stopwatch is gestart.<\/p>\n<p>\u00a0\u00a0id | text1 | text2<br \/>\n--------+--------+--------<br \/>\n 1 | 1 \u00a0 \u00a0 | 1<br \/>\n 2 | 2 \u00a0 \u00a0 | 2<br \/>\n 3 | 3 \u00a0 \u00a0 | 3<br \/>\n\u2026<br \/>\n997 | 997 \u00a0 | 997<br \/>\n998 | 998 \u00a0 | 998<br \/>\n999 | 999 \u00a0 | 999<br \/>\n1000 | 1000\u00a0 | 1000<br \/>\n(1000 rijen)<\/p>\n<p>Tijd: 1,386 ms<\/p>\n<p><strong>Extractie uit de tabel met versleuteling:<\/strong><\/p>\n<pre><code class=\"plaintext\">psql -c \"timing\" -c \"select id, decrypt(text1, 'key'::bytea, 'bf'),\ndecrypt(text2, 'key'::bytea, 'bf') from t2 limit 1000;\"\n\"host=192.168.220.129 dbname=taskdb user=postgres sslmode=disable\" &gt; 2.txt<\/code><\/pre>\n<p>\nDe stopwatch is gestart.<\/p>\n<p>\u00a0\u00a0id | decrypt | decrypt<br \/>\n--------+----------+----------<br \/>\n 1 | x31 | x31<br \/>\n 2 | x32 | x32<br \/>\n 3 | x33 | x33<br \/>\n\u2026<br \/>\n999 | x393939 | x393939<br \/>\n1000 | x31303030 | x31303030<br \/>\n(1000 rijen)<\/p>\n<p>Tijd: 50,203 ms<\/p>\n<p><strong>Testresultaten<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>Zonder versleuteling<\/strong><br \/>\n<strong>Pgcrypto (decrypt)<\/strong><\/p>\n<p>Extractie 1000 rijen<br \/>\n1,386 ms<br \/>\n50,203 ms<\/p>\n<p>CPU<br \/>\n15%<br \/>\n35%<\/p>\n<p>RAM<br \/>\n\u00a0<br \/>\n+5%<\/p>\n<p>\nVersleuteling heeft een sterke invloed op de prestaties. Het is duidelijk dat de timing is gestegen, omdat de decryptie van versleutelde gegevens (en decryptie is meestal nog verpakt in uw logica) aanzienlijke middelen vereist. Dit betekent dat het idee om alle kolommen met gegevens te versleutelen ten koste gaat van de prestaties.<\/p>\n<p>Versleuteling is echter geen zilveren kogel die alle problemen oplost. De gedecodeerde gegevens en de decryptiesleutel bevinden zich tijdens het decoderen en tijdens de overdracht van gegevens op de server. Daarom kunnen sleutels worden onderschept door iedereen met volledige toegang tot de database server, zoals de systeembeheerder.<\/p>\n<p>Wanneer er voor de hele kolom voor alle gebruikers \u00e9\u00e9n sleutel is (zelfs als het niet voor iedereen is, maar voor een beperkte set klanten), is dat niet altijd goed of juist. Daarom zijn we begonnen met end-to-end versleuteling; er zijn opties voor gegevensversleuteling vanuit de client en server in databasesystemen, en er zijn die key-vault opslagplaatsen ontstaan - aparte producten die sleutelbeheer aan de database kant waarborgen.<\/p>\n<p><img decoding=\"async\" alt=\"Beveiliging en databases: waar je rekening mee moet houden bij het selecteren van beschermingsmiddelen.\" src=\"\/wp-content\/uploads\/2020\/05\/cbaa7b9579a65963518ba3cec6114842.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-client-side-encryption\/\"><i>Een voorbeeld van dergelijke versleuteling in MongoDB<\/i><\/a><\/noindex><\/p>\n<h2>Beveiligingsmiddelen in commerci\u00eble en open source databasesystemen<\/h2>\n<p><\/p>\n<p><strong>Functies<\/strong><br \/>\n<strong>Type<\/strong><br \/>\n<strong>Wachtwoordbeleid<\/strong><br \/>\n<strong>Audit.<\/strong><br \/>\n<strong>Bescherming van de broncode van procedures en functies<\/strong><br \/>\n<strong>RLS<\/strong><br \/>\n<strong>Versleuteling<\/strong><\/p>\n<p><strong>Oracle<\/strong><br \/>\nCommercieel<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><strong>MsSql<\/strong><br \/>\nCommercieel<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\"><strong>Jatoba<\/strong><\/a><\/noindex><br \/>\nCommercieel<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\nextensies<\/p>\n<p><strong>PostgreSQL<\/strong><br \/>\nGratis<br \/>\nextensies<br \/>\nextensies<br \/>\n\u2014<br \/>\n+<br \/>\nextensies<\/p>\n<p><strong>MongoDb<\/strong><br \/>\nGratis<br \/>\n\u2014<br \/>\n+<br \/>\n\u2014<br \/>\n\u2014<br \/>\nBeschikbaar in alleen MongoDB Enterprise<\/p>\n<p>\nDe tabel is verre van compleet, maar de situatie is als volgt: in commerci\u00eble producten worden veiligheidsproblemen al lang opgelost, terwijl in open source over het algemeen aanvulling wordt gebruikt voor beveiliging, er ontbreken veel functies en soms moet je iets extra schrijven. Bijvoorbeeld, wachtwoordbeleid - in PostgreSQL zijn er veel verschillende extensies.<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postgres\/postgres\/tree\/master\/contrib\/passwordcheck\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ykrysko\/passwordcheck\">2<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/michaelpq\/pg_plugins\/tree\/master\/passwordcheck_extra\">3<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devrimgunduz\/passwordcheck_cracklib\">4<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/asio\/password\">5<\/a><\/noindex>), die wachtwoordbeleid implementeren, maar naar mijn mening de behoeften van de binnenlandse bedrijfssector niet allemaal dekken.<\/p>\n<p><strong>Wat te doen als je nergens kunt vinden wat je nodig hebt?<\/strong>? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a.<\/p>\n<p>Dan kun je gebruikmaken van externe oplossingen die met verschillende databases werken, zoals 'Crypto DB' of 'Garda DB'. Als we het hebben over oplossingen uit de binnenlandse sector, dan zijn ze daar beter op de hoogte van de normen dan in open source.<\/p>\n<p>Een tweede optie is om zelf te schrijven wat nodig is, toegang tot gegevens te realiseren op het niveau van procedures en encryptie in de applicatie. Het zal echter moeilijker zijn om met de normen om te gaan. Maar in het algemeen kun je de gegevens verbergen zoals nodig, in de database opslaan en ze vervolgens op de juiste manier ontcijferen, direct op het niveau van de applicatie. Denk tegelijkertijd na hoe je deze algoritmes in de applicatie gaat beschermen. Naar onze mening moet dit op het niveau van de database gebeuren, omdat dat sneller werkt.<\/p>\n<p>Deze presentatie werd voor het eerst gegeven op <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup<\/a><\/noindex> door Mail.ru Cloud Solutions. Bekijk<noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/redirect?q=https%3A%2F%2Fbit.ly%2F2U57FAd&amp;redir_token=XNWSBN1AKQA2sjhdReDAv6VnkOV8MTU4OTAxNjMwMEAxNTg4OTI5OTAw&amp;v=wigSv2_zWBU&amp;event=video_description\"> video's <\/a><\/noindex>andere presentaties en abonneer je op evenementaankondigingen in Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Rondom Kubernetes bij Mail.ru Group<\/a><\/noindex>.<\/p>\n<p><strong>Wat verder te lezen over dit onderwerp<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">Meer dan Ceph: block storage van de cloud MCS<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/blog\/kakuyu-bazu-dannyh-vybrat-dlya-proekta-chtoby-ne-oshibitsya\">Hoe kies je een database voor een project, zodat je niet opnieuw hoeft te kiezen.<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/500708\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441 \u0420\u043e\u0436\u043a\u043e\u0432, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u0413\u0430\u0437\u0438\u043d\u0444\u043e\u0440\u043c\u0441\u0435\u0440\u0432\u0438\u0441\u00bb, \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Jatoba. \u0417\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u044b \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0442\u0440\u0435\u0442\u044c\u0438 \u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0430\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81885,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0421\u0423\u0411\u0414: \u043e \u0447\u0451\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Beveiliging en databases: waar je aan moet denken bij het selecteren van beveiligingsmiddelen | ProHoster","description":"Mijn naam is Denis.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0421\u0423\u0411\u0414: \u043e \u0447\u0451\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T11:42:18+00:00","article:modified_time":"2020-05-17T11:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81884","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:48:24","updated":"2022-10-05 02:01:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/81884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=81884"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/81884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/81885"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=81884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=81884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=81884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}