Salvando i dati nel mio db (mysql) con "serialize ($ array);". Questi dati provengono da un modulo con un campo di input. Voglio sapere cosa succede se inserisco qualcosa come "a: 4: {i: 1; s: 7:" fdsfdsf "; i" nel campo modulo. potrebbe rompere i miei dati memorizzati nel DB? Grazie !!Php Serializzare i dati in Mysql
risposta
Ho testato il tuo esempio sul mio sistema, e dopo la serializzazione, viene restituito il valore seguente:
string(42) "a:1:{i:0;s:24:"a:4:{i:1;s:7:"fdsfdsf";i";}"
Questo è ciò che verrà aggiunto al database. Tuttavia, l'archiviazione dell'input dell'utente in chiaro nel database è fortemente scoraggiata. Dovresti prima formattare l'input utente semplice con mysql_real_escape_string() in quanto sfuggirà ai personaggi critici.
A parte questo, se unserialize() viene chiamato sul testo serializzato riletti dal database, l'array viene correttamente restituito. Dovrebbe essere sicuro, ma può produrre risultati inaspettati.
Fare estrema attenzione con l'archiviazione di array serializzati in un database. La serializzazione restituisce una stringa, quindi il campo in cui si memorizzano i dati è in genere VARCHAR o TEXT. Se semplicemente si sovrascrive lo array memorizzato con uno nuovo, i vecchi dati saranno completamente persi. Per aggiornare il database, assicurarsi di aver prima letto i dati dal database in un array e aggiornarlo, quindi solo dopo averlo riscritto nel database.
Mentre non è vietato, l'utilizzo e l'archiviazione di materiale serializzato nel database di solito crea un sacco di problemi. Il database ha un sacco di tipi di dati noti per impostazione predefinita, e grandi array serializzati creano un sovraccarico e complicano l'esecuzione, ed è semplicemente un rompicapo se il sistema deve essere successivamente modificato. E non è possibile utilizzare le query di relazione su campi serializzati.
Un modo per bloccare questo è sfuggire le virgolette prima di inserire i dati nel database.
Si potrebbe fare questo con mysqli_real_escape_string()
http://www.php.net/manual/en/mysqli.real-escape-string.php
Grazie johannes !! – alejoabella
Il vecchio modo
Quando si sta ancora utilizzando mysql_
si potrebbe scrivere query come questo:
$sql = sprintf("INSERT INTO mytable (a) VALUES ('%s')",
mysql_real_escape_string(serialize($myvar))
);
mysql_query($sql) or die("oh no!");
Il metodo consigliato
Per PDO
e mysqli
si ottiene il possibilità di utilizzare istruzioni preparate, che vengono altamente raccomandate esattamente allo scopo di prevenire SQ L vettori di attacco per iniezione. Un esempio in PDO:
$stmt = $db->prepare('INSERT INTO mytable (a) VALUES (:myvar)');
$stmt->execute(array(
':myvar' => serialize($myvar),
));
Campo lunghezze
Inoltre, assicurarsi che la lunghezza dei dati serializzati non superi la dimensione della colonna del campo della tabella; una variabile serializzata troncata è praticamente inutile.
@alejoabella Prego. Tornando a questa risposta, mi sono reso conto che dopotutto non era poi così bello, quindi l'ho rivisto :) –
um .... come fanno esattamente le dichiarazioni preparate a prevenire le iniezioni, ancora? Esattamente - non lo fanno. Affatto. – specializt
@specializt Le dichiarazioni preparate non sono magiche da questo punto di vista, le persone possono ancora (e lo fanno) rovinare tutto, come evidenziato dal recente [Drupal advisory] (https://www.drupal.org/SA-CORE-2014- 005). Tuttavia, se ritieni che l'affermazione nella mia risposta possa essere sfruttata, fammi sapere come ciò potrebbe essere raggiunto. –
- 1. Come serializzare i dati in C
- 2. Interrogare mysql ed esportare i dati come CSV in PHP
- 3. Serializzare i dati dei membri privati
- 4. Facebook PHP SDK - Memorizza i dati utente nel database MYSql
- 5. Dati serializzati PHP archiviati in mysql db error
- 6. Come caricare i dati JSON con jQuery, PHP e MySQL
- 7. MySQL non sta recuperando i dati corretti? (PHP)
- 8. Come visualizzare i dati da mysql usando angular.js PHP?
- 9. CodeIgniter/PHP/MySQL: recupero dati con JOIN
- 10. Come implementare i dati temporali in MySQL
- 11. Come importare i dati XBRL in MySQL?
- 12. Come cercare i dati JSON in mysql?
- 13. Dove mysql memorizza i dati?
- 14. Cancella dati nella tabella MySQL con PHP?
- 15. Come creare grafico da dati PHP/MySql?
- 16. JQuery - Serializzare i dati del modulo nell'array associato
- 17. serializzare i dati usando il limite di dimensione di json.net?
- 18. Serializzare i dati con Avro nel nodo js
- 19. modo migliore per conservare i dati in MySQL indicazioni
- 20. Esportazione di dati MySQL in Excel/CSV tramite php
- 21. Ottenere dati da MySQL in JSON utilizzando PHP
- 22. PHP- inserire dati binari in mysql usando le istruzioni preparate
- 23. PHP partita i dati in una matrice
- 24. Come esportare dati mysql in xml utilizzando php
- 25. Come sfuggire in sicurezza i dati di input in php per mysql
- 26. Come serializzare i set JSON?
- 27. Emissione array Mysql in PHP
- 28. Per gestire i valori "booleani" in PHP e MySQL
- 29. Dati gerarchici in MySQL
- 30. Quale ORM usi per i servizi golang che usano protobuf per serializzare i dati?
Grazie per la risposta e le raccomandazioni, è stato molto utile !!! – alejoabella
Poiché i dati serializzati php restituiscono dati binari, non utilizzare VARCHAR o TEXT ma piuttosto VARBINARY o BLOB. –