¿He cubierto todos los aspectos básicos de la seguridad al enviar una variable del servidor a la página?

StackOverflow https://stackoverflow.com/questions/613680

  •  03-07-2019
  •  | 
  •  

Pregunta

Con formas que siempre he usado

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

Para que mis formularios se envíen a sí mismos.

yo suelo striptags() en caso de que alguien enlace a:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

¿He cubierto todas las bases para protegerme de ataques XSS, o debería usar un enfoque más de lista blanca, digamos una expresión regular que solo permita caracteres alfanuméricos, barra diagonal, signo de interrogación, signo igual, paréntesis, etc.?

¡Gracias!

¿Fue útil?

Solución

Utilice htmlspecialchars en lugar de strip_tags.

Otros consejos

Si desea hacer referencia al mismo esquema / host / ruta, una acción simple = "? " Schould suficiente. De acuerdo con http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

es un uri relativo válido.

Haga que un formulario se envíe a sí mismo enviándolo a esto:

$_SERVER["PHP_SELF"]

Esa variable global generará la página actual.¿A menos que haya una razón por la que necesite la cadena de consulta completa junto con ella?

EDITAR

Dado que, como señaló VolkerK en los comentarios, incluso PHP_SELF es vulnerable, puedes escribir tu propia pequeña variable basada en PHP_SELF y desglose el resto del URI que sabe que no forma parte de su página.Algo como esto:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;

Si su striptags() elimina solo etiquetas (caracteres entre " < " y " > " incluidos los corchetes angulares) , alguien aún puede inyectar javascript:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

Mejor lista blanca de todos los metacaracteres posibles en HTML, Javascript y CSS (es decir, corchetes angulares, paréntesis, llaves, punto y coma, comillas dobles, comillas simples, etc.).

Si desea que se envíe un formulario, simplemente deje la acción vacía, por ejemplo,

<form action="" method="POST">
...
</form>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top