Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2010, 14:33
August
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 8 meses
Puntos: 10
Class Anti-XSS, Anti SQL Injection

Código PHP:
Ver original
  1. class seguridad{
  2.     function decode($source) {
  3.         $source = html_entity_decode($source, ENT_QUOTES, "ISO-8859-1");
  4.         //$source = preg_replace('/&#(\d+);/me',"chr(\\1)", $source);
  5.         //$source = preg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)", $source);
  6.         $source=preg_replace('[^A-Za-z0-9_]','',$source);
  7.         return $source;
  8.     }
  9.     function safeSQL($source, &$connection) {
  10.         if (is_array($source)) {
  11.             foreach($source as $key => $value)
  12.                 if (is_string($value)) $source[$key] = $this->quoteSmart($this->decode($value), $connection);
  13.             return $source;
  14.         } else if (is_string($source)) {
  15.             if (is_string($source)) return $this->quoteSmart($this->decode($source), $connection);
  16.         } else return $source;    
  17.     }
  18.     function quoteSmart($source, &$connection) {
  19.         if (get_magic_quotes_gpc()) $source = stripslashes($source);
  20.         $source = $this->escapeString($source, $connection);
  21.         return $source;
  22.     }
  23.     function escapeString($string, &$connection) {
  24.         if (version_compare(phpversion(),"4.3.0", "<")) mysql_escape_string($string);
  25.         else mysql_real_escape_string($string);
  26.         return $string;
  27.     }
  28.    
  29.     public function printf_array($elementosql,$link){
  30.         $sqlfiltrado=$this->safeSQL(array_shift($elementosql), $link);
  31.         return vprintf($sqlfiltrado,$elementosql);
  32.     }
  33. }
  34.  
  35.         include("db.php");
  36.         $seguridad=new seguridad;
  37. $consulta[0]="UPDATE `usuarios` SET `intentos`='%s',`ja`='%s' WHERE `usuario` = 'a'";
  38. $consulta[1]="Augusto/·%";
  39. $consulta[2]="Algo%/";
  40. echo $seguridad->printf_array($consulta,$link);

Deberia aparecer sin caracter extraños, pero todavia aparece asi

UPDATE `usuarios` SET `intentos`='Augusto/·%',`ja`='Adriana%/' WHERE `usuario` = 'a'85

Lo raro es el 85, de donde sale

Que es lo que esta mal?

Para que me aparescan todavia los caracteres extraños, si en la primera funcion, elimino todos esos caracteres extraños con esta linea

$source=preg_replace('[^A-Za-z0-9_]','',$source);

Saludos y gracias de antemano