Tuttavia, sono convinto che ci sia un modo migliore per farlo. Sto utilizzando FILTER_ SANITIZE_STRING e questo non sembra essere completamente sicuro.
Credo di chiedere, quali metodi impiegate voi e quanto successo hanno? Grazie
Questo approccio è sbagliato su così tanti aspetti! Ho postato una risposta qui sotto e valutato ciascuna delle risposte -1 perché i loro autori si rifiutano di pensare. –
A
risposta
33
Solo fare un sacco di cose che non capisci, non ti aiuterà. Devi capire quali sono gli attacchi per iniezione e come e dove dovresti fare cosa esattamente.
Non incorporare mai stringhe direttamente in SQL. Utilizzare i parametri associati o escape (utilizzando mysql_real_escape_string).
Non unescape (ad esempio stripslashes) quando si recuperano i dati dal database.
Quando si incorporano stringhe in html (ad esempio, quando si è echo), è necessario eseguire l'impostazione predefinita per evitare la stringa (utilizzando htmlentities con ENT_QUOTES).
Se è necessario incorporare stringhe html in html, è necessario considerare l'origine della stringa. Se non è affidabile, è necessario collegarlo a un filtro. strip_tags è in teoria ciò che dovresti usare, ma è imperfetto; Utilizzare invece HtmlPurifier.
Eccellente - questo è significativamente migliore della risposta che stavo scrivendo, ora abbandonata. +1 –
+0
Davvero un bel promemoria per tutti noi :) +1 –
itsols
2
Non! L'utilizzo di mysql_real_escape_string è sufficiente per proteggerti dall'iniezione SQL e il stropslashes che stai facendo dopo ti rende vulnerabile all'iniezione SQL. Se si vuole veramente, metterlo prima come in:
stripslashes non è molto utile se si sta facendo mysql_real_escape_string.
strip_tags protegge contro l'iniezione HTML/XML, non SQL.
La cosa importante da notare è che è necessario sfuggire alle stringhe in modo diverso a a seconda dell'impiego immediato che si ha per esso.
Quando si eseguono richieste MYSQL utilizzare mysql_real_escape_string. Durante la stampa di pagine Web, utilizzare htmlentities. Per creare collegamenti Web utilizzare urlencode ...
Come notato da Vartec, se è possibile utilizzare segnaposti, farlo assolutamente.
In realtà, anche mysql_real_escape_string non è del tutto sicuro. Vedi http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html –
strip_tags è imperfetto .. stringhe di escape, o se hai davvero bisogno per consentire html, utilizzare htmlpurifier –
troelskn
0
Questo argomento è così sbagliato!
NON si deve filtrare l'input dell'utente! È un'informazione che è stata inserita da lui. Che cosa hai intenzione di fare se voglio che la mia password sia: '"'>s3cr3t<script>alert()</script>
Filtra i caratteri e lasciami con una password modificata, quindi non riesco nemmeno ad avere successo nel mio primo accesso? Questo non va bene.
La soluzione corretta è quella di utilizzare le istruzioni preparate o mysql_real_escape_string() per evitare iniezioni SQL e utilizzare context-aware fuga dei personaggi al fine di evitare il codice html di essere incasinato.
Lasciatemi ricordare che il Web è solo uno dei modi in cui è possibile rappresentare le informazioni immesse dall'utente. Accetteresti tale rimozione se alcuni software desktop lo fanno? Spero che la tua risposta sia NO e tu capiresti perché questa non è la strada giusta.
Si noti che in diversi contesti caratteri diversi devono essere sfuggiti. Ad esempio, se è necessario visualizzare il nome utente come un suggerimento, si usare qualcosa come:
Tuttavia, se l'utente ha impostato il suo nome di essere come '"><script>window.document.location.href="http://google.com"</script> cosa hai intenzione di fare? Striscia le virgolette? Questo sarebbe così sbagliato! Invece di fare questo non-sense, considera di evadere le virgolette mentre mostri i dati, non mentre lo persistono!
Un altro contesto da tenere in considerazione è il rendering del valore stesso. Considera il codice html utilizzato in precedenza e immagina che il nome utente sia come <textarea>. Questo avvolgerebbe tutto il codice html che segue in questo elemento textarea, rompendo così l'intera pagina.
Ancora una volta, prendere in considerazione l'escaping dei dati in base al contesto in cui lo si sta utilizzando!
P.S Non proprio sicuro su come reagire a quei voti negativi. Stai leggendo la mia risposta?
Invece di far cancellare il mio commento, cerca di capire cosa stavo dicendo. Se un utente avesse un nome utente con tag di questo tipo, non taglino i tag, io rigetterei completamente il nome utente e li costringerei a trovare un nome utente che sia inferiore, perdonami, stupido. Le password sarebbero diverse, certo, ma i nomi utente con '
dupe: http://stackoverflow.com/questions/129677/whats-the-best-method-for-sanitizing-user-input-with-php – troelskn
Questo approccio è sbagliato su così tanti aspetti! Ho postato una risposta qui sotto e valutato ciascuna delle risposte -1 perché i loro autori si rifiutano di pensare. –