Foros del Web » Programando para Internet » PHP »

¿Es seguro con esta función?

Estas en el tema de ¿Es seguro con esta función? en el foro de PHP en Foros del Web. Buenas, esta función: Código PHP:      function  my_clean ( $string ,  $html  =  FALSE ) {          $string  = ( get_magic_quotes_gpc () ==  0 ) ?  addslashes ( $string ...
  #1 (permalink)  
Antiguo 08/12/2008, 05:00
Avatar de Pedro_valencia  
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 82
Antigüedad: 16 años, 4 meses
Puntos: 6
¿Es seguro con esta función?

Buenas, esta función:

Código PHP:
    function my_clean($string$html FALSE) {
        
$string = (get_magic_quotes_gpc() == 0) ? addslashes($string) :
        
$string;
        
$string trim($string);
        
$string = ($html == TRUE) ? $string :
        
htmlspecialchars($stringENT_QUOTES);
        return 
$string;
    } 
La acabo de crear pero no estoy muy seguro de si protege de las inyecciones SQL.

¿Qué opinais?

Saludos.

Última edición por Pedro_valencia; 08/12/2008 a las 06:02
  #2 (permalink)  
Antiguo 08/12/2008, 05:36
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 18 años, 9 meses
Puntos: 18
Respuesta: ¿Es seguro con esta función?

Puede mejorar.

Dependiendo del servidor SQL donde se pretenda insertar datos, hay funciones que son preferibles a utilizar addslashes, por ejemplo, mysql tiene mysql_real_escape_string(), postgresql tiene pg_escape_string().

Cuando no hay nada mejor disponible, entonces addslashes puede funcionar bien, sin embargo, y nuevamente, dependiendo del motor SQL, es posible que sea necesario agregar alguna validación extra para escapar caracteres que addslashes() no escapa.

Además del tema con los motores SQL, en mi particular, es preferible usar htmlentities() a utilizar htmlspecialchars()

Finalmente, al menos yo, no le veo mucho sentido a la utilidad del segundo parámetro, si es una función de validación implica que todo dato o cadena que se valide con esa función no es confiable por dicha razón, no tiene sentido asumir que los datos que pasen por la función serán ya válidos a nivel html. Claro, tampoco se bajo qué condiciones pretendas utilizar la función así que es posible que si tenga sentido el tener ese segundo parámetro.
__________________
Usuario Reigistrado de linux #399288
  #3 (permalink)  
Antiguo 08/12/2008, 06:01
Avatar de Pedro_valencia  
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 82
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: ¿Es seguro con esta función?

Uso mysql.

Y, ¿htmlentities no convierte todos los carácteres a entidades HTML?

Yo solo quiero convertir los carácteres especiales.

¿La mejorariais? ¿Alguna sugerencia? ¿Alguna función mejor?

¿Qué os parece esta que he encontrado?

Código PHP:

if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}


Un saludo.
  #4 (permalink)  
Antiguo 08/12/2008, 06:12
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: ¿Es seguro con esta función?

yo uso esta...

Código:
// extraida de t-blog

function escapa($valor){
	if(get_magic_quotes_gpc()) $valor = stripslashes($valor);
	if(!is_numeric($valor)) $valor = mysql_real_escape_string($valor);
return($valor);
}
la cogi de el t-blog de truzone (www.truzone.org), supongo que sera buena, por que si a conseguido crear un nuke que no lo hackean en 10 minutos, supongo que el t-blog sera igual de seguro... y para cuando tiene que ser un numero, como es el caso de las categorias utilizo solo intval($_GET[id])

por ejemplo:

Código:
// solo numeros
$sql = mysql_query("SELECT * FROM categorias where id='".intval($_GET[id])."'");

// escapar caracteres extraños
$sql = mysql_query("SELECT * FROM categorias where id='".escapa($_GET[id])."'");
  #5 (permalink)  
Antiguo 08/12/2008, 07:11
Avatar de Pedro_valencia  
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 82
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: ¿Es seguro con esta función?

Ok, gracias a los 2.

Voy a usar la de codig0 entonces.

Saludos.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:57.