tutorial site sheet script reflected probar hacer definiciĆ³n cross como cheat ataque php filter xss

php - site - xss cheat sheet



FunciĆ³n de filtrado XSS en PHP (10)

De acuerdo con www.mcafeesecure.com, la función de filtro general para scripts de sitios vulnerables (XSS) puede ser:

function xss_cleaner($input_str) { $return_str = str_replace( array(''<'',''>'',"''",''"'','')'',''(''), array(''&lt;'',''&gt;'',''&apos;'',''&#x22;'',''&#x29;'',''&#x28;''), $input_str ); $return_str = str_ireplace( ''%3Cscript'', '''', $return_str ); return $return_str; }

¿Alguien sabe de una buena función para filtrar entrada genérica de formularios? Zend_Filter_input parece requerir un conocimiento previo del contenido de la entrada y me preocupa que usar algo como HTML Purifier tenga un gran impacto en el rendimiento.

¿Qué tal algo así como: http://snipplr.com/view/1848/php--sacar-xss/

Muchas gracias por cualquier entrada.


Encontré una solución para mi problema con las publicaciones con alemán umlaut. Para proporcionar desde la limpieza total (muerte) de las publicaciones, codifico los datos entrantes:

*$data = utf8_encode($data); ... function ...*

Y al final, decodifico la salida para obtener los signos correctos:

*$data = utf8_decode($data);*

Ahora la publicación pasa por la función de filtro y obtengo un resultado correcto ...


Hay una serie de formas en que los piratas informáticos utilizan los ataques XSS, las funciones integradas de PHP no responden a todo tipo de ataques XSS. Por lo tanto, funciones como strip_tags, filter_var, mysql_real_escape_string, htmlentities, htmlspecialchars, etc. no nos protegen al 100%. Necesitas un mejor mecanismo, aquí está la solución:

function xss_clean($data) { // Fix &entity/n; $data = str_replace(array(''&amp;'',''&lt;'',''&gt;''), array(''&amp;amp;'',''&amp;lt;'',''&amp;gt;''), $data); $data = preg_replace(''/(&#*/w+)[/x00-/x20]+;/u'', ''$1;'', $data); $data = preg_replace(''/(&#x*[0-9A-F]+);*/iu'', ''$1;'', $data); $data = html_entity_decode($data, ENT_COMPAT, ''UTF-8''); // Remove any attribute starting with "on" or xmlns $data = preg_replace(''#(<[^>]+?[/x00-/x20"/'])(?:on|xmlns)[^>]*+>#iu'', ''$1>'', $data); // Remove javascript: and vbscript: protocols $data = preg_replace(''#([a-z]*)[/x00-/x20]*=[/x00-/x20]*([`/'"]*)[/x00-/x20]*j[/x00-/x20]*a[/x00-/x20]*v[/x00-/x20]*a[/x00-/x20]*s[/x00-/x20]*c[/x00-/x20]*r[/x00-/x20]*i[/x00-/x20]*p[/x00-/x20]*t[/x00-/x20]*:#iu'', ''$1=$2nojavascript...'', $data); $data = preg_replace(''#([a-z]*)[/x00-/x20]*=([/'"]*)[/x00-/x20]*v[/x00-/x20]*b[/x00-/x20]*s[/x00-/x20]*c[/x00-/x20]*r[/x00-/x20]*i[/x00-/x20]*p[/x00-/x20]*t[/x00-/x20]*:#iu'', ''$1=$2novbscript...'', $data); $data = preg_replace(''#([a-z]*)[/x00-/x20]*=([/'"]*)[/x00-/x20]*-moz-binding[/x00-/x20]*:#u'', ''$1=$2nomozbinding...'', $data); // Only works in IE: <span style="width: expression(alert(''Ping!''));"></span> $data = preg_replace(''#(<[^>]+?)style[/x00-/x20]*=[/x00-/x20]*[`/'"]*.*?expression[/x00-/x20]*/([^>]*+>#i'', ''$1>'', $data); $data = preg_replace(''#(<[^>]+?)style[/x00-/x20]*=[/x00-/x20]*[`/'"]*.*?behaviour[/x00-/x20]*/([^>]*+>#i'', ''$1>'', $data); $data = preg_replace(''#(<[^>]+?)style[/x00-/x20]*=[/x00-/x20]*[`/'"]*.*?s[/x00-/x20]*c[/x00-/x20]*r[/x00-/x20]*i[/x00-/x20]*p[/x00-/x20]*t[/x00-/x20]*:*[^>]*+>#iu'', ''$1>'', $data); // Remove namespaced elements (we do not need them) $data = preg_replace(''#</*/w+:/w[^>]*+>#i'', '''', $data); do { // Remove really unwanted tags $old_data = $data; $data = preg_replace(''#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i'', '''', $data); } while ($old_data !== $data); // we are done... return $data; }


Intente usar para Clean XSS

xss_clean($data): "><script>alert(String.fromCharCode(74,111,104,116,111,32,82,111,98,98,105,101))</script>


Tengo un problema similar. Necesito que los usuarios envíen contenido html a una página de perfil con un excelente editor WYSIWYG (Redactorjs!), Escribí la siguiente función para limpiar el html enviado:

<?php function filterxss($str) { //Initialize DOM: $dom = new DOMDocument(); //Load content and add UTF8 hint: $dom->loadHTML(''<meta http-equiv="content-type" content="text/html; charset=utf-8">''.$str); //Array holds allowed attributes and validation rules: $check = array(''src''=>''#(http://[^/s]+(?=/.(jpe?g|png|gif)))#i'',''href''=>''|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i''); //Loop all elements: foreach($dom->getElementsByTagName(''*'') as $node){ for($i = $node->attributes->length -1; $i >= 0; $i--){ //Get the attribute: $attribute = $node->attributes->item($i); //Check if attribute is allowed: if( in_array($attribute->name,array_keys($check))) { //Validate by regex: if(!preg_match($check[$attribute->name],$attribute->value)) { //No match? Remove the attribute $node->removeAttributeNode($attribute); } }else{ //Not allowed? Remove the attribute: $node->removeAttributeNode($attribute); } } } var_dump($dom->saveHTML()); } ?>

La matriz $ check contiene todos los atributos permitidos y las reglas de validación. Tal vez esto sea útil para algunos de ustedes. Todavía no lo he probado, así que los consejos son bienvenidos




¿Manera simple? Utilice strip_tags() :

$str = strip_tags($input);

También puedes usar filter_var() para eso:

$str = filter_var($input, FILTER_SANITIZE_STRING);

La ventaja de filter_var() es que puede controlar el comportamiento, por ejemplo, eliminando o codificando caracteres bajos y altos.

Aquí hay una lista de filtros desinfectantes .


htmlspecialchars() es perfectamente adecuado para filtrar la entrada del usuario que se muestra en formularios html.


function clean($data){ $data = rawurldecode($data); return filter_var($data, FILTER_SANITIZE_SPEC_CHARS); }