{"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\/it\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","title":{"rendered":"Sicurezza e DBMS: cosa ricordare quando si scelgono i mezzi di protezione","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1><img decoding=\"async\" alt=\"Sicurezza e DBMS: cosa ricordare quando si scelgono i mezzi di protezione\" src=\"\/wp-content\/uploads\/2020\/05\/ac49253838e36336af127d71394139d8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/h1>\n<p>\nMi chiamo Denis Rozhkov, sono il responsabile dello sviluppo software presso l'azienda \u00abGazinformservis\u00bb, nel team di prodotto <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\">Jatoba<\/a><\/noindex>. La legislazione e le normative aziendali pongono determinate esigenze in materia di sicurezza del trattamento dei dati. Nessuno vuole che terzi abbiano accesso a informazioni riservate, quindi per ogni progetto sono importanti le seguenti questioni: identificazione e autenticazione, gestione degli accessi ai dati, garantire l'integrit\u00e0 delle informazioni nel sistema, registrazione degli eventi di sicurezza. Pertanto, voglio parlare di alcuni aspetti interessanti riguardanti la sicurezza dei DBMS. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nL'articolo \u00e8 stato preparato sulla base di un intervento a <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup,<\/a><\/noindex> organizzato <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Se non vuoi leggere, puoi guardare:<\/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=\"Guarda il video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nNell'articolo ci saranno tre parti:<\/p>\n<ul>\n<li>Come proteggere le connessioni.<\/li>\n<li>Cos'\u00e8 l'audit delle attivit\u00e0 e come registrare ci\u00f2 che accade dal lato del database e della connessione ad esso.<\/li>\n<li>Come proteggere i dati all'interno del database e quali tecnologie esistono per farlo.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Sicurezza e DBMS: cosa ricordare quando si scelgono i mezzi di protezione\" src=\"\/wp-content\/uploads\/2020\/05\/fbdca7f4a925b9ceb78de06c6e245b23.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tre componenti della sicurezza dei DBMS: protezione delle connessioni, audit delle attivit\u00e0 e protezione dei dati<\/i><\/p>\n<h2>Protezione delle connessioni<\/h2>\n<p>\n\u00c8 possibile collegarsi al database sia direttamente che indirettamente tramite applicazioni web. Di solito, l'utente lato business, cio\u00e8 la persona che lavora con il DBMS, interagisce con esso non direttamente.<\/p>\n<p>Prima di parlare della protezione delle connessioni, \u00e8 necessario rispondere a domande importanti, da cui dipende come saranno strutturate le misure di sicurezza:<\/p>\n<ul>\n<li>un utente business \u00e8 equivalente a un utente del DBMS;<\/li>\n<li>l'accesso ai dati del DBMS \u00e8 fornito solo tramite API che controlli, oppure c'\u00e8 accesso diretto alle tabelle;<\/li>\n<li>il DBMS \u00e8 stato isolato in un segmento protetto, chi e come interagisce con esso;<\/li>\n<li>viene utilizzato pooling\/proxy e strati intermedi che possono modificare le informazioni su come \u00e8 strutturata la connessione e chi utilizza il database.<\/li>\n<\/ul>\n<p>\nOra vediamo quali strumenti possono essere utilizzati per proteggere le connessioni:<\/p>\n<ol>\n<li>Utilizza soluzioni di tipo firewall per database. Uno strato di protezione aggiuntivo aumenter\u00e0 almeno la trasparenza di ci\u00f2 che accade nel DBMS, al massimo \u2014 potrai garantire una protezione aggiuntiva dei dati.<\/li>\n<li>Utilizza politiche di password. La loro applicazione dipende da come \u00e8 strutturata la tua architettura. In ogni caso, una sola password nel file di configurazione di un'applicazione web collegata a un DBMS non \u00e8 sufficiente per garantire protezione. Esistono diversi strumenti DBMS che consentono di controllare quali utenti e password necessitano di aggiornamento.\n<p>Puoi leggere di pi\u00f9 sulle funzioni di valutazione degli utenti <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/data-safe\/doc\/user-assessment-reports.html\">qui<\/a><\/noindex>, cos\u00ec come \u00e8 possibile informarsi su 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\">qui<\/a><\/noindex>.\u00a0<\/li>\n<li>Arricchisci il contesto della sessione con le informazioni necessarie. Se la sessione \u00e8 opaca e non capisci chi stia lavorando nel DBMS, puoi arricchire le informazioni riguardanti chi, cosa e perch\u00e9 sta eseguendo operazioni. Queste informazioni possono essere visualizzate nell'audit.<\/li>\n<li>Configura SSL se non hai una separazione di rete tra il DBMS e gli utenti finali, e non \u00e8 in un VLAN separato. In tali casi, \u00e8 obbligatorio proteggere il canale tra il consumatore e il DBMS stesso. Esistono strumenti di protezione anche tra le soluzioni open source.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Come influenzer\u00e0 le prestazioni del DBMS?<\/h3>\n<p>\nOsserviamo con PostgreSQL come SSL influisca sull'uso della CPU, sull'aumento dei tempi di risposta e sulla diminuzione del TPS, se non verranno consumate troppe risorse attivandolo.<\/p>\n<p>Carichiamo PostgreSQL utilizzando pgbench: \u00e8 un programma semplice per eseguire test sulle prestazioni. Esegue ripetutamente una sequenza di comandi, eventualmente in sessioni parallele del database, e calcola la velocit\u00e0 media delle transazioni.<\/p>\n<p><strong>Test 1 senza SSL e utilizzando SSL<\/strong> \u2014 la connessione \u00e8 stabilita ad ogni transazione:<\/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 senza SSL e utilizzando SSL<\/strong> \u2014 tutte le transazioni vengono eseguite in una sola connessione:<\/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>Altre impostazioni<\/strong>:<\/p>\n<pre><code class=\"plaintext\">fattore di scaling: 1\nmodalit\u00e0 query: semplice\nnumero di clienti: 10\nnumero di thread: 1\nnumero di transazioni per cliente: 5000\nnumero di transazioni effettivamente elaborate: 50000\/50000<\/code><\/pre>\n<p>\n<strong>Risultati dei test<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>NO SSL<\/strong><br \/>\n<strong>SSL<\/strong><\/p>\n<p><strong>La connessione viene stabilita ad ogni transazione<\/strong><\/p>\n<p>latenza media<br \/>\n171.915 ms<br \/>\n187.695 ms<\/p>\n<p>tps inclusi i collegamenti stabiliti<br \/>\n58.168112<br \/>\n53.278062<\/p>\n<p>tps esclusi i collegamenti stabiliti<br \/>\n64.084546<br \/>\n58.725846<\/p>\n<p>CPU<br \/>\n24%<br \/>\n28%<\/p>\n<p><strong>Tutte le transazioni vengono eseguite in una sola connessione<\/strong><\/p>\n<p>latenza media<br \/>\n6.722 ms<br \/>\n6.342 ms<\/p>\n<p>tps includendo i collegamenti stabiliti<br \/>\n1587.657278<br \/>\n1576.792883<\/p>\n<p>tps esclusi i collegamenti stabiliti<br \/>\n1588.380574<br \/>\n1577.694766<\/p>\n<p>CPU<br \/>\n17%<br \/>\n21%<\/p>\n<p>\nCon carichi leggeri, l'influenza di SSL \u00e8 comparabile all'errore di misurazione. Se la quantit\u00e0 di dati trasmessi \u00e8 molto grande, la situazione potrebbe essere diversa. Se stabiliremo una connessione per ogni transazione (cosa rara, di solito le connessioni vengono condivise tra gli utenti), avremo un gran numero di connessioni\/disconnessioni, l'influenza potrebbe essere leggermente maggiore. Cio\u00e8, i rischi di riduzione delle prestazioni possono esistere, tuttavia, la differenza non \u00e8 cos\u00ec grande da non utilizzare la protezione.<\/p>\n<p>Fate attenzione: c'\u00e8 una forte differenza se confrontiamo le modalit\u00e0 di lavoro: all'interno di una sessione lavorate o in modalit\u00e0 diverse. Questo \u00e8 chiaro: per creare ogni connessione vengono spesi delle risorse.<\/p>\n<p>Abbiamo avuto un caso in cui abbiamo collegato Zabbix in modalit\u00e0 trust, quindi non abbiamo controllato md5, non era necessaria l'autenticazione. Poi il cliente ha chiesto di attivare la modalit\u00e0 di autenticazione md5. Questo ha comportato un carico maggiore sulla CPU e le prestazioni sono diminuite. Abbiamo iniziato a cercare modi per ottimizzare. Una delle possibili soluzioni al problema \u00e8 realizzare una limitazione di rete, creare VLAN separate per il DBMS, aggiungere impostazioni per far capire chi e da dove si sta connettendo e rimuovere l'autenticazione. Inoltre, \u00e8 possibile ottimizzare le impostazioni di autenticazione per ridurre i costi durante l'attivazione dell'autenticazione, ma in generale l'applicazione di diversi metodi di autenticazione influisce sulle prestazioni e richiede di tenere in considerazione questi fattori durante la progettazione delle capacit\u00e0 di calcolo dei server (hardware) per il DBMS.<\/p>\n<p>Conclusione: in alcune soluzioni anche piccole sfumature nell'autenticazione possono avere un grande impatto sul progetto e diventa problematico quando si capisce solo durante l'implementazione in produzione.<\/p>\n<h2>Audit delle azioni<\/h2>\n<p>\nL'audit pu\u00f2 riguardare non solo il DBMS. L'audit \u00e8 la raccolta di informazioni su ci\u00f2 che accade in diversi segmenti. Pu\u00f2 riguardare sia il database firewall sia il sistema operativo su cui \u00e8 costruito il DBMS.<\/p>\n<p>Nei DBMS commerciali a livello Enterprise, l'audit \u00e8 ben implementato, mentre nell'open source non sempre. Ecco cosa \u00e8 disponibile in PostgreSQL:<\/p>\n<ul>\n<li>default log \u2014 logging integrato;<\/li>\n<li>extensions: pgaudit \u2014 se il logging predefinito non \u00e8 sufficiente, \u00e8 possibile utilizzare impostazioni separate che risolvono alcune sfide.<\/li>\n<\/ul>\n<p>\n<b>Integrazione alla relazione nel video:<\/b><\/p>\n<p>La registrazione di base degli operatori pu\u00f2 essere garantita mediante uno strumento standard di registrazione con log_statement = all.<\/p>\n<p>Questo \u00e8 accettabile per il monitoraggio e altri tipi di utilizzo, ma non fornisce il livello di dettaglio normalmente necessario per un audit.<\/p>\n<p>Non \u00e8 sufficiente avere un elenco di tutte le operazioni eseguite sul database.<\/p>\n<p>Deve anche essere possibile trovare affermazioni specifiche che siano di interesse per l'auditor.<\/p>\n<p>Lo strumento di registrazione standard mostra ci\u00f2 che l'utente ha richiesto, mentre pgAudit si concentra sui dettagli di ci\u00f2 che \u00e8 accaduto quando il database ha eseguito la richiesta.<\/p>\n<p>Ad esempio, un auditor potrebbe voler verificare che una tabella specifica sia stata creata in una finestra di manutenzione documentata.<\/p>\n<p>Questo potrebbe sembrare un compito semplice per un audit di base e grep, ma cosa succede se incontri qualcosa di simile a questo (intenzionalmente confuso) esempio:<\/p>\n<p>DO $$<br \/>\nBEGIN<br \/>\n Esegui 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>La registrazione standard ti dar\u00e0 questo:<\/p>\n<p>LOG: statement: DO $$<br \/>\nBEGIN<br \/>\n Esegui 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Sembra che per trovare la tabella di interesse potrebbe essere necessaria una certa conoscenza del codice nei casi in cui le tabelle vengono create dinamicamente.<\/p>\n<p>Questo non \u00e8 ideale, poich\u00e9 sarebbe preferibile cercare semplicemente per nome della tabella.<\/p>\n<p>\u00c8 qui che pgAudit pu\u00f2 essere utile.<\/p>\n<p>Per lo stesso input, fornir\u00e0 questo output nel registro:<\/p>\n<p>AUDIT: SESSION,33,1,FUNCTION,DO,,,\u00abDO $$<br \/>\nBEGIN<br \/>\n Esegui 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nFINE $$;\"<br \/>\nAUDIT: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)<\/p>\n<p>Viene registrato non solo il blocco DO, ma anche l'intero testo di CREATE TABLE con il tipo di operazione, il tipo di oggetto e il nome completo, il che facilita la ricerca.<\/p>\n<p>Nella registrazione degli operatori SELECT e DML, pgAudit pu\u00f2 essere configurato per registrare un'azione separata per ciascuna relazione a cui si fa riferimento nell'operazione.<\/p>\n<p>Non \u00e8 necessaria l'analisi sintattica per trovare tutte le operazioni che riguardano una tabella specifica (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgaudit\/pgaudit\/blob\/master\/README.md\">*<\/a><\/noindex>)\u00bb.<\/p>\n<h3>Come influenzer\u00e0 le prestazioni del DBMS?<\/h3>\n<p>\nFacciamo dei test attivando l'audit completo e vediamo cosa succede alle prestazioni di PostgreSQL. Attiviamo la registrazione massima del DB su tutti i parametri.<\/p>\n<p>Nel file di configurazione non cambiamo quasi nulla, importante \u2014 attiviamo la modalit\u00e0 debug5 per ottenere il massimo delle informazioni.<\/p>\n<p>, affinch\u00e9 il tuo database di test non voglia effettuare un backup silenziosamente.<\/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 = attivo<br \/>\nlog_checkpoints = attivo<br \/>\nlog_connections = attivo<br \/>\nlog_disconnections = attivo<br \/>\nlog_duration = attivo<br \/>\nlog_hostname = attivo<br \/>\nlog_lock_waits = attivo<br \/>\nlog_replication_commands = attivo<br \/>\nlog_temp_files = 0<br \/>\nlog_timezone = 'Europe\/Moscow'<\/p>\n<p>\nSulla base dati PostgreSQL con parametri 1 CPU, 2,8 GHz, 2 GB di RAM, 40 GB di HDD eseguiamo tre test di carico, usando i comandi:<\/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>Risultati del test:<\/strong><\/p>\n<p><strong>Senza registrazione<\/strong><br \/>\n<strong>Con registrazione<\/strong><\/p>\n<p>Tempo totale di riempimento del 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 connessioni)<\/strong><\/p>\n<p>Numero di transazioni in 10 minuti<br \/>\n74169<br \/>\n32445<\/p>\n<p>Transazioni\/sec<br \/>\n123<br \/>\n54<\/p>\n<p>Ritardo medio<br \/>\n405 ms<br \/>\n925 ms<\/p>\n<p><strong>Test 2 (150 connessioni su 100 possibili)<\/strong><\/p>\n<p>Numero di transazioni in 10 minuti<br \/>\n81727<br \/>\n31429<\/p>\n<p>Transazioni\/sec<br \/>\n136<br \/>\n52<\/p>\n<p>Ritardo medio<br \/>\n550 ms<br \/>\n1432 ms<\/p>\n<p><strong>Sulle dimensioni<\/strong><\/p>\n<p>Dimensione del DB<br \/>\n2251 MB<br \/>\n2262 MB<\/p>\n<p>Dimensione dei registri del DB<br \/>\n0 MB<br \/>\n4587 MB<\/p>\n<p>\nIn definitiva: un audit completo non \u00e8 molto vantaggioso. La quantit\u00e0 di dati derivanti dall'audit sar\u00e0 pari, se non superiore, a quella dei dati stessi nel database. Tale volume di registrazione che si genera durante l'uso della DBMS \u00e8 un problema comune in produzione.<\/p>\n<p>Esaminiamo altri parametri:<\/p>\n<ul>\n<li>La velocit\u00e0 non cambia molto: senza registrazione \u2014 43,74 sec, con registrazione \u2014 53,23 sec.<\/li>\n<li>Le prestazioni in termini di RAM e CPU subiranno un calo, poich\u00e9 \u00e8 necessario generare un file con l'audit. Questo \u00e8 evidente anche in produzione.<\/li>\n<\/ul>\n<p>\nCon l'aumento del numero di connessioni, ovviamente, i risultati peggioreranno leggermente.<\/p>\n<p>Nelle aziende con audit \u00e8 ancora pi\u00f9 complicato:<\/p>\n<ul>\n<li>i dati sono molti;<\/li>\n<li>l'audit \u00e8 necessario non solo tramite syslog in SIEM, ma anche in file: nel caso in cui accada qualcosa con syslog, deve esserci vicino al database un file in cui vengono salvati i dati;<\/li>\n<li>per l'audit \u00e8 necessario uno scaffale separato, per non influenzare le operazioni I\/O sui dischi, poich\u00e9 occupa molto spazio;<\/li>\n<li>a volte, i dipendenti della sicurezza informatica richiedono standard GOST in ogni luogo, cercano l'identificazione secondo GOST.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Limitazione dell'accesso ai dati<\/h2>\n<p>\nEsaminiamo le tecnologie utilizzate per proteggere i dati e per regolamentare l'accesso ad essi nei DB commerciali e open source.<\/p>\n<p>Cosa si pu\u00f2 utilizzare in generale:<\/p>\n<ol>\n<li>Crittografia e offuscazione di procedure e funzioni (Wrapping) \u2014 ovvero strumenti e utilit\u00e0 separate che trasformano il codice leggibile in incomprensibile. Tuttavia, poi non pu\u00f2 essere n\u00e9 modificato n\u00e9 rifattorizzato indietro. Questo approccio \u00e8 talvolta necessario almeno sul lato del DBMS \u2014 la logica delle limitazioni di licenza o la logica di autorizzazione viene crittografata proprio a livello di procedura e funzione.<\/li>\n<li>La restrizione della visibilit\u00e0 dei dati per riga (RLS) \u00e8 quando utenti diversi vedono la stessa tabella, ma con un insieme differente di righe al suo interno, ovvero per qualcuno certe informazioni non possono essere mostrate a livello di riga.<\/li>\n<li>La modifica dei dati visualizzati (Masking) \u00e8 quando gli utenti in una colonna della tabella vedono o i dati completi o solo asterischi, ovvero per alcuni utenti le informazioni saranno nascoste. La tecnologia definisce quali dati mostrare a ciascun utente in base al livello di accesso.<\/li>\n<li>La separazione degli accessi Security DBA\/Application DBA\/DBA riguarda pi\u00f9 che altro la limitazione dell'accesso stesso al DBMS, cio\u00e8 si pu\u00f2 separare il personale della sicurezza dai database administrator e application administrator. In open source ci sono poche tecnologie in questo ambito, mentre nei DBMS commerciali ce ne sono molte. Sono necessarie quando ci sono molti utenti con accesso ai server.<\/li>\n<li>Limitazione dell'accesso ai file a livello di filesystem. \u00c8 possibile assegnare diritti e privilegi di accesso a directory, in modo che ogni amministratore possa accedere solo ai dati necessari.<\/li>\n<li>L'accesso mandatorio e la pulizia della memoria sono tecnologie raramente utilizzate.<\/li>\n<li>La crittografia end-to-end nella DBMS \u00e8 una crittografia end-side con gestione delle chiavi lato server.<\/li>\n<li>Crittografia dei dati. Ad esempio, la crittografia a livello di colonna: quando utilizzi un meccanismo che crittografa una singola colonna del database.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Come influisce sulle performance del DBMS?<\/h3>\n<p>\nVediamo l'esempio della crittografia a livello di colonna in PostgreSQL. C'\u00e8 il modulo pgcrypto, che consente di memorizzare in modo crittografato campi selezionati. Questo \u00e8 utile quando solo alcuni dati hanno valore. Per leggere i campi crittografati, il client trasmette la chiave di decrittazione, il server decrittografa i dati e li restituisce al client. Senza la chiave, nessuno potr\u00e0 fare nulla con i tuoi dati.<\/p>\n<p><strong>Eseguiamo un test con pgcrypto<\/strong>. Creiamo una tabella con dati crittografati e dati normali. Di seguito i comandi per creare le tabelle, nella prima riga c'\u00e8 un comando utile: la creazione dell'estensione con la registrazione del DBMS:<\/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>\nSuccessivamente proveremo a fare una selezione di dati da ciascuna tabella e daremo un'occhiata ai tempi di esecuzione.<\/p>\n<p><strong>Selezione dalla tabella senza funzione di crittografia<\/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>\nCronometro attivato.<\/p>\n<p>\u00a0\u00a0id | text1 | text2<br \/>\n\u2014\u2014+\u2014\u2014\u2014+\u2014\u2014\u2014-<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 righe)<\/p>\n<p>Tempo: 1,386 ms<\/p>\n<p><strong>Selezione dalla tabella con funzione di crittografia:<\/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>\nCronometro attivato.<\/p>\n<p>\u00a0\u00a0id | decrypt | decrypt<br \/>\n\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014<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 righe)<\/p>\n<p>Tempo: 50,203 ms<\/p>\n<p><strong>Risultati dei test<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>Senza crittografia<\/strong><br \/>\n<strong>Pgcrypto (decrypt)<\/strong><\/p>\n<p>Selezione 1000 righe<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>\nLa crittografia influisce notevolmente sulle prestazioni. \u00c8 evidente che il tempo \u00e8 aumentato, poich\u00e9 le operazioni di decrittazione dei dati crittografati (e la decrittazione \u00e8 generalmente ancora avvolta nella tua logica) richiedono risorse significative. Quindi, l'idea di crittografare tutte le colonne che contengono dati \u00e8 rischiosa e pu\u00f2 portare a una diminuzione delle prestazioni.<\/p>\n<p>Detto ci\u00f2, la crittografia non \u00e8 una soluzione universale per tutti i problemi. I dati decrittografati e la chiave di decrittazione durante il processo di decrittazione e trasferimento dei dati si trovano sul server. Pertanto, le chiavi possono essere intercettate da chi ha accesso completo al server del database, ad esempio da un amministratore di sistema.<\/p>\n<p>Quando per un'intera colonna si utilizza una sola chiave per tutti gli utenti (anche se non per tutti, ma per clienti di un insieme limitato), non \u00e8 sempre una scelta ottimale. \u00c8 proprio per questo che si \u00e8 iniziato a fare crittografia end-to-end, considerando nella gestione dei database varie opzioni di crittografia dei dati dal lato del client e del server, sono emerse le soluzioni key-vault \u2014 prodotti separati che forniscono gestione delle chiavi dal lato del database.<\/p>\n<p><img decoding=\"async\" alt=\"Sicurezza e DBMS: cosa ricordare quando si scelgono i mezzi di protezione\" 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>Esempio di tale crittografia in MongoDB<\/i><\/a><\/noindex><\/p>\n<h2>Strumenti di sicurezza in database commerciali e open source<\/h2>\n<p><\/p>\n<p><strong>Funzioni<\/strong><br \/>\n<strong>Tipo<\/strong><br \/>\n<strong>Password Policy<\/strong><br \/>\n<strong>Audit<\/strong><br \/>\n<strong>Protezione del codice sorgente di procedure e funzioni<\/strong><br \/>\n<strong>RLS<\/strong><br \/>\n<strong>Crittografia<\/strong><\/p>\n<p><strong>Oracle<\/strong><br \/>\nCommerciale<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><strong>MsSql<\/strong><br \/>\nCommerciale<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 \/>\nCommerciale<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\nestensioni<\/p>\n<p><strong>PostgreSQL<\/strong><br \/>\nFree<br \/>\nestensioni<br \/>\nestensioni<br \/>\n&#8212;<br \/>\n+<br \/>\nestensioni<\/p>\n<p><strong>MongoDb<\/strong><br \/>\nFree<br \/>\n&#8212;<br \/>\n+<br \/>\n&#8212;<br \/>\n&#8212;<br \/>\nDisponibile solo in MongoDB Enterprise<\/p>\n<p>\nLa tabella non \u00e8 affatto completa, ma la situazione \u00e8 questa: nei prodotti commerciali le questioni di sicurezza sono affrontate da tempo, negli open source, di norma, si utilizzano integrazioni per la sicurezza, molte funzionalit\u00e0 mancano e a volte \u00e8 necessario scrivere qualcosa. Ad esempio, le politiche di password: in PostgreSQL ci sono molte estensioni diverse.<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>), che implementano le politiche delle password, ma tutte le esigenze del segmento corporate nazionale, a mio parere, nessuna le soddisfa.<\/p>\n<p><strong>Cosa fare se non si trova quello che serve<\/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>In tal caso, \u00e8 possibile utilizzare soluzioni di terze parti che lavorano con diversi DBMS, come \u00abCrypto DB\u00bb o \u00abGarda DB\u00bb. Se si tratta di soluzioni dal segmento nazionale, l\u00ec conoscono meglio gli standard GOST rispetto all'open source.<\/p>\n<p>Una seconda opzione \u00e8 scrivere autonomamente ci\u00f2 di cui hai bisogno, implementare a livello di procedure l'accesso ai dati e la crittografia nell'applicazione. Tuttavia, con il GOST sar\u00e0 pi\u00f9 complicato. Ma in generale, puoi nascondere i dati come necessario, archiviarli nel DBMS, per poi recuperarli e decifrarli come richiesto, direttamente a livello di applicazione. Tieni subito presente come proteggerai questi algoritmi nell'applicazione. A nostro avviso, \u00e8 necessario farlo a livello di DBMS, perch\u00e9 lavorer\u00e0 pi\u00f9 velocemente.<\/p>\n<p>Questa presentazione \u00e8 stata pronunciata per la prima volta a <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup<\/a><\/noindex> by Mail.ru Cloud Solutions. Guarda<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 <\/a><\/noindex>altre presentazioni e iscriviti agli annunci di eventi su Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Attorno a Kubernetes in Mail.ru Group<\/a><\/noindex>.<\/p>\n<p><strong>Cosa leggere ancora sull'argomento<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">Pi\u00f9 di Ceph: archiviazione su 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\">Come scegliere un database per il progetto, in modo da non dover scegliere di nuovo<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Sicurezza e DBMS: cosa tenere a mente nella scelta dei mezzi di protezione | ProHoster","description":"Mi chiamo Denis.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/81884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=81884"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/81884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/81885"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=81884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=81884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=81884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}