Foros del Web » Programando para Internet » PHP »

Seguridad en variables de entrada

Estas en el tema de Seguridad en variables de entrada en el foro de PHP en Foros del Web. hola que tal, vengo a hacerles una consulta a ver que es lo que usan ustedes o que recomiendan, quiero hacer una funcion que valide ...
  #1 (permalink)  
Antiguo 17/01/2013, 07:41
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Seguridad en variables de entrada

hola que tal, vengo a hacerles una consulta a ver que es lo que usan ustedes o que recomiendan, quiero hacer una funcion que valide entradas de texto ($_POST,$_GET) y las devuelva listas para meterlas en SQL sin riesgo, hise esta funcion pero nose si es suficiente, ustedes que opinan?

Código PHP:
Ver original
  1. Function ValidaTextoSQL($VAR){
  2.         $VAR = htmlspecialchars(stripslashes($VAR ));
  3.         $VAR = str_ireplace("script", "blocked", $VAR );
  4.         $VAR = mysql_escape_string($VAR );
  5.         Return($VAR);
  6. }

solo nesesito validar texto plano, es decir por ahora no me interesesa conservar ningun tipo de formato html y menos aun javascript, que opinan?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 17/01/2013, 07:47
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: Seguridad en variables de entrada

Cita:
Iniciado por NSD Ver Mensaje
hola que tal, vengo a hacerles una consulta a ver que es lo que usan ustedes o que recomiendan, quiero hacer una funcion que valide entradas de texto ($_POST,$_GET) y las devuelva listas para meterlas en SQL sin riesgo, hise esta funcion pero nose si es suficiente, ustedes que opinan?

Código PHP:
Ver original
  1. Function ValidaTextoSQL($VAR){
  2.         $VAR = htmlspecialchars(stripslashes($VAR ));
  3.         $VAR = str_ireplace("script", "blocked", $VAR );
  4.         $VAR = mysql_escape_string($VAR );
  5.         Return($VAR);
  6. }

solo nesesito validar texto plano, es decir por ahora no me interesesa conservar ningun tipo de formato html y menos aun javascript, que opinan?
Lo mejor que puedes hacer mas que adultearar los datos como estas haciendo, es bindearlos a las querys que realices.

http://php.net/manual/es/mysqli-stmt.bind-param.php
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 17/01/2013, 07:48
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Seguridad en variables de entrada

Buenas!

Yo creo que mientras "elimines" las posibles amenazas todo debería ir bien. Yo personalmente hago lo siguiente:

- Busco caracteres "críticos" (por llamarlos de alguna manera) como "-", las dobles comillas, comillas simples... y las reemplazo por código html (htmlentities)

- Busco también palabras reservadas de mysql, como IN, AND, SELECT... (tengo una lista con todas, si la quieres ) y en esas palabras cambio las vocales por código html (htmlentities).

- También (a veces, si hace falta) cambio los caracteres de salto de línea, o ciertos caracteres que pueda usar yo cuando programo (los ";", "|", y otros, por ejemplo). Estos los sustituyo también.

Llámame paranóico si quieres, jajaja

Saludos!
  #4 (permalink)  
Antiguo 17/01/2013, 07:58
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Seguridad en variables de entrada

Hola h2swider no conocia esa funcion, parece interesante, ahora mismo voy a ponerme a probar a ver que tan segura es, ya comentare como me va jaja
DoHITB no te llamo paranoico, de hecho yo antes validava asi:
Código php:
Ver original
  1. Preg_Replace('/[^A-Za-z0-9]+/' , ' ' , $VAR);
tenia el remiedo que me metieran algun caracter raro XD
ahora ando en busca de algo mas "profesional" y eficiente pero si no aprendo a a "blindear" variables ten esa lista a mano que seguro te la pido
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 17/01/2013, 08:15
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Seguridad en variables de entrada

h2swider tengo una duda con esa funcion, aparentemente no soporta multiquerys es decir no puedo ejecutar 2 consultas en simultaneo, como puedo solucionar eso? no encontre ninguna mysqli_multi_stmt_execute o algo asi :/
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 17/01/2013, 08:19
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: Seguridad en variables de entrada

Lo anterior que te pase es la forma en que recibe los datos la query, hacer varias querys dentro de una string no tiene nada que ver, igualmente se puede hacer.

http://php.net/manual/es/mysqli.multi-query.php

De todas formas no esta muy bien hacer multiquerys si estas buscando algo bien programado, deberias usar procedimientos.

http://stackoverflow.com/questions/6...ared-statments
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Última edición por h2swider; 17/01/2013 a las 08:26
  #7 (permalink)  
Antiguo 17/01/2013, 08:40
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Seguridad en variables de entrada

He probado bastante y no puedo hacer dos consultas en simultaneo, sin embargo el blindado de datos funciona perfecto para una XD
La base de datos:
Código SQL:
Ver original
  1. --
  2. -- Base de datos: 'prueba'
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS 'tabla1' (
  6.   'ID' INT(11) NOT NULL AUTO_INCREMENT,
  7.   'Nombre' CHAR(60) NOT NULL,
  8.   'Apellido' CHAR(60) NOT NULL,
  9.   PRIMARY KEY ('ID')
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  11.  
  12. CREATE TABLE IF NOT EXISTS 'tabla2' (
  13.   'ID' INT(11) NOT NULL AUTO_INCREMENT,
  14.   'IDT1' INT(11) NOT NULL,
  15.   'Edad' CHAR(20) NOT NULL,
  16.   PRIMARY KEY ('ID')
  17. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

El PHP:
Código PHP:
Ver original
  1. $Conexion = Mysqli_Connect('localhost','User','Pass','prueba');
  2. $_POST['Nombre']='Nehuen';
  3. $_POST['Apellido']='Prados';
  4. $_POST['Edad']='20';
  5. $SQL="INSERT INTO tabla1 VALUES('',?,?);";
  6. $SQL.="INSERT INTO tabla2 VALUES('',LAST_INSERT_ID(),?);";
  7. $Consulta = Mysqli_Prepare($Conexion, $SQL);
  8. Mysqli_Stmt_Bind_Param($Consulta, 'ssi', $_POST['Nombre'], $_POST['Apellido'], $_POST['Edad']);
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 17/01/2013 a las 09:08

Etiquetas: entrada, html, mysql, seguridad, sql, variables
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 19:19.