filter_var
è valido per filtrare i dati? Che tipo di dati cattivi filtrerà? Io uso mysql_real_escape_string
ma mi chiedo se l'aggiunta di filter_var
aiuterà?Filter_var è un buon modo per andare?
risposta
Per difendersi dall'iniezione SQL, utilizzare le istruzioni preparate se possibile. In caso contrario, usa mysql_real_escape_string per stringhe, (int) casting o intval() per interi, (float) o floatval() per float e addcslashes ($ input, '% _') per le stringhe da utilizzare all'interno delle istruzioni LIKE. Le cose diventano ancora più complicate quando si tenta di sfuggire alle stringhe da utilizzare all'interno delle istruzioni RLIKE.
per il filtro contenuti HTML, la cosa migliore sarebbe strip_tags (senza passare $ allowable_tags), ma ... voi potrebbero non piacere/lo vogliono, nel qual caso la soluzione più conveniente è:
$escaped = htmlspecialchars($input, ENT_QUOTES, $your_charset);
A soluzione più affidabile sarebbe utilizzare una libreria come HTML Purifier
Le funzioni di filtro sono OK, ma alcune di esse sono più valide dei filtri. A seconda delle tue esigenze potresti trovarne alcuni utili.
htmlspecialchars() è la cosa giusta da fare per l'output di testo in HTML. strip_tags() perderebbe il contenuto se si volesse utilizzare il carattere "<" legittimo nel testo e non visualizzerebbe "&" correttamente. – bobince
Dipende molto da quello che stai cercando di fare, non posso davvero rispondere senza conoscere le specifiche. I possibili filtri e i loro effetti sono elencati qui: Types of filters
Fondamentalmente per filtrare e validare qualsiasi exploit xss o mysql provenienti dall'input dell'utente. – mikelbring
Ci sono troppi modi (http://ha.ckers.org/xss.html) di iniezioni XSS e SQL. Dipende tutto dalla tua applicazione come ha elaborato i dati dell'utente. – Gumbo
È possibile regolare filter_var
utilizzando lo FILTER_*
constants. Sembra che tu stia cercando sanitisation di dati (aggiustando i dati per renderlo sicuro *) piuttosto che validation (controllare che i dati siano sicuri).
Diversi filtri possono aiutare con diversi compiti. Mentre mysql_real_escape_string
è ok per sanitizzare i dati per prevenire l'iniezione SQL, non va bene per l'output di dati che possono contenere HTML. Ecco un paio di filtri di userei per le attività quotidiane:
FILTER_SANITIZE_SPECIAL_CHARS
- utile per la visualizzazione (non rimuovere) il codice HTML, prevenire attacchi XSS e la conversione di simboli per entità HTML.FILTER_SANITIZE_STRING
con i flagSTRIP_LOW/HIGH
- rimuove effettivamente l'HTML (vederestrip_tags
).FILTER_SANITIZE_URL
- rende sicuri gli URL *.FILTER_SANITIZE_EMAIL
- rende sicuri gli indirizzi di posta elettronica, anche se preferirei usare il cugino di convalida prima di memorizzare l'indirizzo.
* Io uso sicuro vagamente, io sono del parere che non si può mai essere troppo sicuri.
Sulla base di alcuni test minori, sono giunto alla conclusione che le costanti di filter_var
non sono attendibili.
Ad esempio:
filter_var('[email protected]', FILTER_VALIDATE_EMAIL); // valid
filter_var('http://.', FILTER_VALIDATE_URL); // valid
filter_var('[email protected]', FILTER_SANITIZE_EMAIL); // [email protected]
filter_var('http://.', FILTER_SANITIZE_URL); // http://.
Questi sono chiaramente valori non validi, ma passano filter_var
s' costanti. Non fidarti di filter_var
.
L'igienizzazione non è la stessa cosa della convalida. –
@Mathew, sei corretto ma non sono sicuro di cosa abbia a che fare con i problemi con 'filter_var'. Non filtrerà né disinfetterà correttamente correttamente gli input che ho fornito. – eyelidlessness
Per quanto posso vedere in http://tools.ietf.org/html/rfc822 l'indirizzo email è stato formulato correttamente. In particolare, 'c' potrebbe essere registrato come nuovo TLD, e' b-'un dominio al suo interno (' -' è un carattere valido). Non vedo problemi lì. '' Def! Xyz% abc + tag @ [127.0.0.1] 'un indirizzo valido? (Ti risparmio, mi chiedo - lo è.) Non ho trovato rapidamente alcun esempio del nome del dominio, anche se posso dirti che 'dig .' dà una risposta ragionevole e' stackoverflow.com'. restituisce lo stesso IP di 'stackoverflow.com' (sì, punto finale sul primo URL). Sono d'accordo con 'filter_var' e PHP in questo. – Iiridayn
Tutto dipende da cosa intendi con un url valido o con un'e-mail valida.
Ad esempio [email protected]
- beh, è possibile filtrare i domini di primo livello per escludere .c
ma l'elenco dei domini di primo livello non è costante. Inoltre tutti i personaggi sono validi. Anche se questo sembra strano e quasi certamente non è valido, molti filtri regex lo convalidano anche.
Con l'e-mail [email protected]
o url http://.
se visualizzati o utilizzati nei collegamenti non faranno danno, anche se non vanno da nessuna parte.
Penso che parte del problema sia la questione di quanto si preferiscono i filtri. Se il problema principale è XSS o SQL injection o altrimenti impedire l'input pericoloso, indipendentemente dal fatto che il valore sia utilizzabile può essere irrilevante, quindi questo tipo di filtro può fare il trucco.
Se si desidera assicurarsi che il valore non sia solo sicuro ma anche utilizzabile, è una bestia più ingannevole.
- 1. È un buon modo per usare java.util.concurrent.FutureTask?
- 2. qual è un buon modo per combinare attraverso un set?
- 3. Qual è un buon modo per creare un progetto Backbone.js?
- 4. Chiama per undefined function filter_var()
- 5. Qual è un buon modo per distribuire un'applicazione Perl?
- 6. È un buon modo per intercettare le chiamate di sistema?
- 7. Qual è un buon modo per dividere le stringhe qui?
- 8. C'è un buon modo per rilevare che MySQL è "pronto?"
- 9. È un buon modo per fare JS OOP?
- 10. Qual è un buon modo per documentare sub/pub?
- 11. RESTKit è un buon sostituto per ASIHTTPRequest?
- 12. Qual è un buon modo per testare un file per vedere se è un file zip?
- 13. Cancellazione dell'input cin: è cin.ignore non è un buon modo?
- 14. C'è un modo per sopprimere VS cercando di andare online?
- 15. filter_var using FILTER_VALIDATE_REGEXP
- 16. Dovremmo andare al modo Corona?
- 17. Un buon modo per cancellare un vettore float?
- 18. E 'regex un buon modo per testare un url
- 19. C'è un buon modo per rilevare un attacco NFS stante
- 20. C'è un buon modo per mavenificare un gioco! applicazione quadro?
- 21. C'è un buon modo per copiare un widget Gtk?
- 22. Un buon modo per avere un listener della collezione?
- 23. Qual è un buon modo per gestire i commit clean in git per un progetto legacy?
- 24. Qual è un buon modo per creare un dardo wrapper per un'API JavaScript?
- 25. Test degli eventi PropertyChanged: è un buon modo?
- 26. Che cosa è un buon modo per registrare gli utenti dall'app del telefono
- 27. Qual è un buon modo per caricare le trame in modo dinamico in OpenGL?
- 28. Qual è un buon modo per utilizzare un cmdlet PowerShell in un sistema di build NAnt?
- 29. file_get_contents buon modo per gestire gli errori
- 30. cosa è un buon modo per uscire da uno script node.js dopo "tutto è stato fatto"
Non so perché questo è stato downvoted – Ross
Si dovrebbe cercare di capire meglio quali iniezioni XSS e SQL sono e perché sono possibili invece di chiedere una funzione miracolo per prevenirli. – Gumbo
Aiuterà cosa? Cosa stai cercando di fare che speri che filter_var possa raggiungere? – jmucchiello