en PHP el mejor filtro XSS es:
htmlspecialchars($_POST['param'],ENT_QUOTES);
La razón por la que también hay que codificar las citas es becuase que no es necesario <> explotar algunos XSS. Por ejemplo, este es vulnerable a XSS:
print('<A HREF="http://www.xssed.com/'.htmlspecialchars($_REQUEST[xss]).'">link</a>');
No es necesario <> para ejecutar Javascript en este caso, porque se puede utilizar onmouseover, aquí es un ataque ejemplo:
$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';
los ENT_QUOTES se ocupa de las comillas dobles.
El correo electrónico es un poco diferente, javascript no debe ejecutarse por el cliente de correo, y si es así, su sitio no se verá afectado debido a la Política de Mismo origen. Pero para estar seguro, seguiría usando htmlspecialchars($var,ENT_QUOTES);
. SIN EMBARGO, la función de correo de PHP() puede sucumbir a un tipo diferente de vulnerabilidad, se llama inyección CRLF. Aquí hay una vulnerabilidad de ejemplo contra PHP-Nuke. Si tiene una llamada de función como esta: mail($fmail, $subject, $message, $header);
Luego debe asegurarse de que un usuario no pueda inyectar \r\n
en $ encabezado.
código vulnerable:
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";
parcheado:
$_GET[name]=str_replace(array("\r","\n"),$_GET[name]);
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";
¿Hay alguna prueba automatizados para encontrar esos "agujeros"? – Kirzilla
Tu cerebro y tus manos. Pero hay algunos si buscas en Google, el de http://www.acunetix.com/ es bueno (pero mi cerebro es mejor) pero no es gratis. –
utilice el escáner xss gratuito de Acunetix: http://www.acunetix.com/cross-site-scripting/scanner.htm Se probarán los tipos extraños de xss, como el de mi ejemplo. – rook