Desinfecte su entrada, escapando de los caracteres especiales HTML. En PHP, esto se hace con htmlspecialcharacters . Asegúrate de no proporcionar una marca que evite que htmlspecialcharacters evite el tipo de cita que utilizas.
Su problema es que su URL es http://example.com/?s=login&m=forgotten" onload=alert(966) bad="
, y su código PHP que probablemente sea algo como esto:
<?php
$var = $_GET['m'];
echo '<a href="$var">something</a>';
pero en sustitución simple y recta con la entrada incorrecta se convierte en:
<a href="forgotten" onload=alert(966) bad=">something</a>';
El problema surge del "
sin escapar. La función de sanitización de PHP htmlspecialcharacters
cambiará el "
a "
, por lo que con:
<?php
$var = htmlspecialcharacters($_GET['m']);
echo '<a href="$var">something</a>';
el HTML representado será:
<a href="forgotten" onload=alert(966) bad="">something</a>';
que su navegador interpretará como un enlace gigante a forgotten" onload=alert(966) bad="
, en lugar de una etiqueta html que contiene el atributo onload
.
Personalmente, me alejaría de PHP y de un marco web que comienza con la seguridad en mente; por ejemplo, HTML automáticamente escapa todas las entradas de la base de datos y los parámetros de consulta en las plantillas (a menos que se indique específicamente lo contrario), realiza verificaciones de CSRF de manera predeterminada, usa parámetros de consulta, etc.