Evitare gli slash automatici?
Evitare gli slash automatici? postato il 15/06/2012 14:53:58 nel forum programmazione, open source e hosting e modificato da nuprestige il 15/06/2012 14:57:24
Ciao ragazzi,
c'è un modo per evitare che il sistema anteponga degli slash agli apostrofi?
Mi spiego, capisco che gli apostrofi vengano interpretati dal php come se fossero roba sua, e per distinguerli lui ci metta un bello slash davanti, però è pur vero che se io ho un personaggio che si chiama Connor O'Connor (esempio a caso, sperando che nessuno nella vita si chiami così) non mi va tanto di vedermi scritto Connor O(slash)Connor, che storpia un pò, ovunque lo leggi.
Questo per quanto riguarda il nome (o meglio il cognome)
Poi, ancor più simpaticamente, nel tag delle azioni succede la stessa cosa, ma in questo caso gli slash si riproducono addirittura e mi colonizzano!
Esempio: il Tag è Bar dell'angolo
Prima azione: [Bar dell(slash)'angolo] [Azione ok, non da problemi con gli apostrofi]
Seconda azione: [Bar dell(2slash)'angolo] [Azione ok, non da problemi con gli apostrofi]
Terza azione: [Bar dell(3slash)'angolo] [Azione ok, non da problemi con gli apostrofi]
...
Decima azione: [Bar dell(10slash)'angolo] [Azione ok, non da problemi con gli apostrofi]
Cosa c'è di diverso tra il tag e l'azione? Perchè nelle azioni gli apostrofi li posso usare.
EDIT: ho sostituito (slash) ai veri slash perchè evidentemente anche questo forum li mal sopporta xD Parlo ovviamente di questi: \\\\\\\
Pagine → 1
15/06/2012 15:04:09
kidemonas ha scritto: [quote]Cosa c'è di diverso tra il tag e l'azione? Perchè nelle azioni gli apostrofi li posso usare.
perché il filtro utilizzato è diverso. Immagino che utilizzi il gdrcd 5.1 o comunque un open source. Dovresti dare uno sguardo ai codici che gestiscono il filtraggio dei tag e confrontarli con quelli che gestiscono il filtraggio dei nomi. Le funzioni dei filtri, se stai utilizzando il 5.1, sono in "function.inc.php" se non vado errato. Basta vedere quale funzione viene richiamata nelle parti di codice php che ti interessano, ad esempio in chat o in scheda, e andarsi a vedere quali filtri usa quando richiama quella specifica funzione[/quote]
Uso uno pseudo extreme con parti originali, ma credo che il principio sia lo stesso...ora vado a dare un'occhiata a quello che hai detto tu
15/06/2012 15:39:58
kidemonas ha scritto: si il principio è fondamentalmente quello :) il fatto è che il filtraggio dei dati non è utile tanto al php quanto alla protezione delle query. Gli apostrofi in una query corrispondono (non vorrei dire una castroneria) ad una sorta di delimitatore di stringhe, così come accade in php e in altri linguaggi di programmazione. Se non fossero filtrati, durante l'inserimento dei dati nel database si rischierebbe una perdita di una parte di query con conseguente perdita di qualche valore o errore in fase di query. Senza contare il fatto che, se non filtrati, gli apostrofi possono rappresentare un pericolo per il proprietario del database (il famoso sql injection che tutti oramai conosciamo e temiamo; un metodo tanto banale quanto pericoloso per accedere al database e modificarne/ricavarne dati). Probabilmente il filtro prevederà un addslashes o un htmlentities, o entrambi. Ovviamente quei filtri non vanno rimossi assolutamente se non si vuole incorrere in falle di sicurezza. Puoi invece modificare i filtri utilizzati quando vai a stampare l'output
Si, chiaro.
Però se per il cognome non incontro dubbi, nel senso che dovunque compaia basta farlo comparire come stripslashes(cognome) e non certo dove lo si inserisce, il tag mi spaventa un pò per quello che mi hai detto.
Anche perchè ho sbagliato a scrivere, in chat esce correttamente, il problema è che rimane nell'input con gli slash, ma se io nell'input dove si scrive metto un valore stripslashes è rischioso, no? Oppure ho capito male?
15/06/2012 16:38:04
Ti sei spiegatissimo, e da quello che ho capito ciò che mi appare nell'input del Tag è un output, cioè è il tag precedentemente inserito che mi si stampa lì, quindi se io lo filtro non rischio problemi, è giusto?
<input type=Text Name=Tag value="<? if (!$Tag) { echo "Tag"; } else { echo stripslashes($Tag); } ?>">
Fare una cosa del genere dovrebbe essere sicura quindi...
15/06/2012 18:17:52 e modificato da leoblacksoul il 15/06/2012 18:18:43
Giusto per completezza:
spesso alcuni hosting hanno configurazioni con l'opzione "magic-quotes" attivata. magic-quotes è un'impostazione di PHP che mette automaticamente gli slash davanti a tutti gli apici che arrivano in input.
Puoi disattivarlo dal file .htaccess (se usi apache) o nel file dello script stesso (questo è inefficiente, usare in casi estremi), a me personalmente da fastidio e lo disattivo sempre; preferisco mettere gli slash solo dove so che mi serve. Sicuramente una cosa del genere è più comoda per chi non è tanto esperto oppure si dimentica di fare l'escape delle stringhe.
In htaccess:
php_flag magic_quotes_gpc Off
Ricordati comunque che la variabile che stampi nell'html per il Tag va comunque purificata. Non va in un database quindi non gli vanno aggiunti gli slash, ma dato che viene stampata in output devi passarla attraverso htmlentities() per evitare attacchi di tipo XSS e simili
15/06/2012 19:25:40 e modificato da dyrr il 15/06/2012 19:26:01
il filtro in ingresso del gdrcd 5.1 prende in considerazione sia gli host dov eil magic quotes è atticato che non:
function gdrcd_filter($what, $str)
{
switch (strtolower($what))
{
case 'in':
case 'get':
$str = addslashes(str_replace('\\','',$str));
break;
case 'num':
$str = (int)$str;
break;
case 'out':
$str = htmlentities($str, ENT_QUOTES, 'utf-8');
break;
case 'addslashes':
$str = addslashes($str);
break;
case 'email':
$str = (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,4}$#is", $str))? $str : false;
break;
case 'includes':
$str = (preg_match("#[^:]#is"))? htmlentities($str, ENT_QUOTES) : false;
break;
}
return $str;
}
togliendo tutti i backslash e poi inserendoli con l'addslashes per cui se ti viene restituito un nick con uno slash deve esserci qualche problema sul come hai settato i filtri su quella variabile.
15/06/2012 22:24:20
dyrr ha scritto:
function gdrcd_filter($what, $str)
{
switch (strtolower($what))
{
case 'in':
case 'get':
$str = addslashes(str_replace('\','',$str));
break;
....
cut
Mi chiedo cosa accadrebbe se nel messaggio effettivo ci fossero stati dei backslash...glieli levi tutti così? Sembra un po' il casino che accade su questo forum.
Più che altro sarebbe saggio controllare direttamente se magic quotes è attivato, oppure disattivarlo direttamente.
Comunque si, in gdrcd extreme non c'era un filtro di input
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Foundation Galactic Frontier ↗
Fallen Gods ↗
Imperion ↗
Cafuné ↗
Raja Dunia ↗
RAID Shadow Legends ↗
Wuthering Waves ↗