Foros del Web » Programando para Internet » PHP »

Seguridad

Estas en el tema de Seguridad en el foro de PHP en Foros del Web. Buenas gente , quisiera que alguien mirara un par de funciones que tengo para seguridad en consutas y para que tampoco me cuelen etiquetas html: ...
  #1 (permalink)  
Antiguo 22/03/2009, 06:55
 
Fecha de Ingreso: diciembre-2008
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 6
Seguridad

Buenas gente , quisiera que alguien mirara un par de funciones que tengo para seguridad en consutas y para que tampoco me cuelen etiquetas html:

Código PHP:
function limpiarHTML($string)
{
 
$html=htmlspecialchars($string);
 
$html=trim($html);
 return 
$html;
}

// y para mysql

function sql_safe($string){
  if(
get_magic_quotes_gpc()) 
  {
    
$string stripslashes($string);
  }
  
$badWords "(delete)|(update)|(union)|(insert)|(drop)|(http)|(--)";
  
$string eregi_replace($badWords""$string);
  
$string mysql_real_escape_string($string);
  return 
$string;

gracias a todos
  #2 (permalink)  
Antiguo 22/03/2009, 07:06
 
Fecha de Ingreso: marzo-2009
Mensajes: 164
Antigüedad: 15 años
Puntos: 1
Respuesta: Seguridad

También puedes usar
Código PHP:
htmlentities(); 
eficaz para evitar ataques XSS
  #3 (permalink)  
Antiguo 22/03/2009, 11:48
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad

Dependiendo de la finalidad que tenga tu sistema, no creo que sea lo más óptimo borrar palabras tan "triviales" como SELECT, UNION, HTTP, o todas las que allí pones.

Supongo que no es necesario decirte que magic_quotes debe ser preferentemente desactivada en el php.ini, pero si no es posible hacerlo, realizar el escape al inicio del script. Así tienes TODOS los datos limpios:

Código php:
Ver original
  1. function stripslashes_array(&$datos) {
  2.     $datos = is_array($datos) ? array_map('stripslashes_array', $datos) : stripslashes($datos);
  3.     return $datos;
  4. }
  5.  
  6. if(
  7.     ( function_exists("get_magic_quotes_gpc") and get_magic_quotes_gpc() ) or
  8.     ( ini_get('magic_quotes_sybase') and (strtolower(ini_get('magic_quotes_sybase')) != "off" ) )
  9. ) {
  10.     stripslashes_array($_GET);
  11.     stripslashes_array($_POST);
  12.     stripslashes_array($_COOKIE);
  13. }
A lo que voy es que ese proceso debe realizarse globalmente y no sólo a ciertos datos cuando van a formar parte de la consulta.

Por otro lado, regresando a los de la eliminación de palabras, como te digo no es recomendable borrarlas, aunque esto obviamente depende de la finalidad de tu sistema. Usar simplemente mysql_real_escape_string() sobre los datos, además de una validación con expresiones regulares, es más que suficiente para evitar inyecciones SQL.

  #4 (permalink)  
Antiguo 22/03/2009, 17:11
 
Fecha de Ingreso: diciembre-2008
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Seguridad

pues ni idea de lo de tener desactivado el get_magic_quotes del php.ini, a ese punto no he llegado, si me puedes orientar un poco mas,
de todas formas esta funcion que me has pasado, es válida tanto como si esta o como si no esta la directiva get_magic_quotes activada?.
muchas gracias por responder
  #5 (permalink)  
Antiguo 22/03/2009, 19:46
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad

Ese bloque de código detecta el estado de magic_quotes (La parte del if), y si está activado realiza el stripslashes correspondiente para restaurar estos datos a sus valores originales. Si está en off, el script no hace nada.

Es mejor que leas directamente en el manual de php sobre magic_quotes y el riesgo que conlleva. Explicarlo por aquí sería repetir lo mismo que allí dice.

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:30.