Può questo prevenire XSS?

-1

In PHP, ho sempre usato questo per rappresentare input e textareas:

$foo = trim(htmlentities($_POST['foo'], ENT_QUOTES); // the trim is to prevent empty submissions

Può essere valido anche per prevenire attacchi di SQL injection?

    
posta Slim Shady 17.05.2016 - 06:05
fonte

1 risposta

4

La tua istruzione sql:

 select * from foo where numerical_id=$foo;

La richiesta POST

 foo=1;drop%20table%20foobar;

Il valore risultante in $foo

 foo=1;drop table foobar;

L'istruzione SQL risultante

 select * from foo where numerical_id=foo=1;drop table foobar;

Can it also be valid to prevent SQLIs?

Ovviamente no.

Come per XSS: il tuo PHP:

<?php
$foo = trim(htmlentities($_POST['foo'], ENT_QUOTES));
print "<script>numerical_id=$foo;</script>"
?>

La richiesta POST

foo=10;document.write(...)

Il risultato

<script>numerical_id=10;document.write(...)</script>

Poiché non puoi utilizzare le virgolette in ... puoi costruire le tue stringhe con String.fromCharCode o simili, quindi non è necessario fornire una stringa tra virgolette.

Can this prevent XSS?

Ovviamente anche no, almeno non XSS generico.

In generale: Contesto diverso ha regole di escape diverse . htmlentities è utile per il contesto HTML, ma non per il contesto URL, contesto JS, contesto CSS, contesto SQL .... E diventa più complesso, ad esempio l'aggiunta dinamica del codice a un attributo onclick ha sia il contesto HTML che JS.     
risposta data 17.05.2016 - 06:32
fonte

Leggi altre domande sui tag