Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/02/2013, 18:15
Avatar de Albuss
Albuss
 
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Pregunta Las funciones que evitan el XSS tambien evita inyección HTML?

Tengo esta funcion en php que fue diseñada para evitar los ataques XSS, esta funcion evita tambien los ataques inyección HTML?


la funcion es esta :

Código PHP:
Ver original
  1. function sacarXss($val) {
  2.    $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
  3.    $search = 'abcdefghijklmnopqrstuvwxyz';
  4.    $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  5.    $search .= '1234567890!@#$%^&*()';
  6.    $search .= '~`";:?+/={}[]-_|\'\\';
  7.    for ($i = 0; $i < strlen($search); $i++) {
  8.       $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
  9.       $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
  10.    }
  11.    $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
  12.    $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
  13.    $ra = array_merge($ra1, $ra2);
  14.    $found = true;  
  15.    while ($found == true) {
  16.       $val_before = $val;
  17.       for ($i = 0; $i < sizeof($ra); $i++) {
  18.          $pattern = '/';
  19.          for ($j = 0; $j < strlen($ra[$i]); $j++) {
  20.             if ($j > 0) {
  21.                $pattern .= '(';
  22.                $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
  23.                $pattern .= '|(�{0,8}([9][10][13]);?)?';
  24.                $pattern .= ')?';
  25.             }
  26.             $pattern .= $ra[$i][$j];
  27.          }
  28.          $pattern .= '/i';
  29.          $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2);
  30.          $val = preg_replace($pattern, $replacement, $val);
  31.          if ($val_before == $val) {
  32.             $found = false;
  33.          }
  34.       }
  35.    }
  36.   return $val;
  37. }