- Home
- Categorie
- Coding e Sistemistica
- PHP
- Caratteri speciali e codici maligi, la sfida dopo form
-
Caratteri speciali e codici maligi, la sfida dopo form
Lo so che questo argomento è stato trattato più volte in questo ed in altri forum io stesso, ho aspettato molto prima di postare questo 3D ma mi sembra arrivato il momento di fare luce su un problema che si presenta a me da più di un anno e dal numero delle richieste nei vari forum anche a molti altri utenti. Sto parlando dei caratteri speciali, e delle sequenze di codice (speso maligno) che vengono inseriti nei forum e spesso mal interpretati dai DB.
Io stesso fino a poco tempo fa usavo la combinazione di 4 funzioni php:
htmlspecialchars
nl2br
stripslashes
trimMagari non le usavo nel modo corretto ma ho spesso avuto problemi anche utilizzando questi tag.
Recentemente ho scoperto che per far funzionare il tutto il db e la connessione devono essere settati ? utf8_general_ci?, francamente non ho assolutamente capito come si setta la connessione, e dopo aver passato quasi un ora a modificare tutti i campi delle mie tabelle nella codifica richiesta le tabelle mi appaiono ancora con collation ?latin1_swedish_ci?.
Speravo che utilizzando un WYSIWYG come TinyMce cambiasse qualcosa ma non è stato così.Quindi chiedo a chiunque abbia lo stesso problema o (speriamo) a chi lo abbiamo risolto di rispondere e di spiegare chiaramente la sua soluzione.
-
Ciao Mark116,
per settare la connessione in utf8, subito dopo la connessione al database esegui questa query:
SET NAMES utf8
-
Scusami non ho capito:
[PHP]
include("/home/worldte1/public_html/script/config.php");
$db = mysql_connect($db_host, $db_username, $db_password, $prefix);
if ($db == FALSE)
die ("Errore nella connessione. Vi preghiamo di informare l'assistenza di questo errore.");
mysql_select_db($databse_name, $db)
or die ("Errore nella selezione del database. Vi preghiamo di informare l'assistenza di questo errore.");[/PHP]
-
[php]
include("/home/worldte1/public_html/script/config.php");
$db = mysql_connect($db_host, $db_username, $db_password, $prefix);
if ($db == FALSE)
die ("Errore nella connessione. Vi preghiamo di informare l'assistenza di questo errore.");
mysql_select_db($databse_name, $db)
or die ("Errore nella selezione del database. Vi preghiamo di informare l'assistenza di questo errore.");
mysql_query("SET NAMES utf8") or die(mysql_error());
[/php]
-
Grazie mille, e per quanto riguarda i db?
-
Imposta sia le tabelle che loro campi in utf8_general_ci.
-
Come si impostano le tabelle? i campi ci sono riuscito
-
Vai sulla tabella con phpmyadmin ed in operazioni trovi la collation.
-
Grazie mille, se hai altri consigli specie sull'importazione nel db o altro ti invito a condividerli
-
Aggiungo questo, dopo aver istallato tinymce le cose sono migliorate un pò.
Importo il testo con la funzione stripslashes, successivamente inserisco il testo in un arry:[php]
$arry_message[$number] = $message_user;
$message = serialize($arry_message);
[/php]E carico il messaggio nel db. Gli unici caratteri che non funzionano sono ' e .Sapete per caso come risolvere?
-
Che significa non funzionano? Perchè fai stripslashes, fai un addslashes nel caso in cui i magic_quotes siano su off.
-
Allora ho modificato, il magic_quotes non so se è on o off e non posso modificarlo.
Ho cambiato, ora se inserisco " oppure \ oppure ' non mi stampa l'arry, tutti i campi spariscono.
-
[php]
// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
if(!get_magic_quotes_gpc())
{
$var1 = addslashes($var1);
$var2 = addslashes($var2);
}
[/php]
-
Ho inserito questo codice
if (get_magic_quotes_gpc())
{
$message_user = addslashes($_REQUEST['message_user']);
} else {
$message_user = $_REQUEST['message_user'];
}
è giusto? se si ho risolto il problema con ", ma \ non funziona ancora mentre ' mi da addirittura errore di connessione.
-
No, è:
[php]
if(!get_magic_quotes_gpc())
[/php]
Errore di connessione o errore di sintassi della query?
-
Allora nel caso precedente con errore intendevo
[php]
if (mysql_query($query_update, $db))
{
Completato();
}
else
{
Errore_Sql();
}
[/php]Mi da Errore_Sql();Se invece utilizzo il sistema che mi hai appena dato:
" ' \ mi sparisce tutto l'arry.
-
Ciao mi sono rassegnato e ho fatto così:
if (!get_magic_quotes_gpc())
{
$message_user = $_REQUEST['message_user'];
$message_user = str_replace('"','"', $message_user);
$message_user = str_replace('?','"', $message_user);
$message_user = str_replace('?','"', $message_user);$message_user = str_replace("'","'", $message_user);
$message_user = str_replace("?","'", $message_user);
$message_user = str_replace("?","'", $message_user);
} else {
$message_user = $_REQUEST['message_user'];
}
Solo che non riesco a farlo con \ potete aiutermi? in più volevo capire come inserire la funzione che blocca i SQL InjectionGrazie mille