¿Puede esto evitar XSS?

-1

En PHP, siempre lo he usado para representar entradas y áreas de texto:

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

¿También puede ser válido para evitar ataques de inyección SQL?

    
pregunta Slim Shady 17.05.2016 - 06:05
fuente

1 respuesta

4

Su declaración de SQL:

 select * from foo where numerical_id=$foo;

La solicitud POST

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

El valor resultante en $foo

 foo=1;drop table foobar;

La declaración SQL resultante

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

¿También puede ser válido para prevenir SQLIs?

Obviamente no.

En cuanto al XSS: Tu PHP:

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

La solicitud POST

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

El resultado

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

Ya que no puedes usar comillas en ... , puedes construir tus cadenas con String.fromCharCode o similar, por lo que no es necesario dar una cadena entre comillas.

  

¿Esto puede prevenir XSS?

Obviamente también no, al menos no general XSS.

En general: El contexto diferente tiene reglas de escape diferentes . htmlentities es útil para el contexto HTML, pero no para el contexto URL, el contexto JS, el contexto CSS, el contexto SQL ... Y se vuelve más complejo, ya que agregar código dinámicamente a un atributo onclick tiene tanto contexto HTML como JS.     
respondido por el Steffen Ullrich 17.05.2016 - 06:32
fuente

Lea otras preguntas en las etiquetas