cual es el proceso correcto antes de grabar en la bd los datos que vienen de un formulario.
primero se valida y luego se sanitiza o viceversa? y porque?
Recibe ayuda de expertos
Es gratis y fácil
Respuestas, votos y comentarios
Recibe puntos, vota y da la solución
cual es el proceso correcto antes de grabar en la bd los datos que vienen de un formulario.
primero se valida y luego se sanitiza o viceversa? y porque?
Hola Elvis,
sanear y validar apuntan a diferentes cuestiones:
Sanear es sacar de la entrada al software todo cosa que pueda alterar su funcionamiento, ya sea por inyección HTML, inyección JavaScript, inyección PHP o inyección SQL. Cada tipo de inyección requiere un saneo diferente porque la naturaleza de cada problema está dada por cada lenguaje en particular.
Validar es verificar que los datos tengan sentido y coherencia para la acción que se esté realizando con los datos. Por ejemplo no agregar un registro con datos faltantes, no agregar registros duplicados, impedir realizar ventas en cuenta corriente que sobrepasen el límite de crédito, borrar registros de tablas que están siendo usados por otras tablas, etc.
PHP tiene funciones que permiten sanear la mayoría de los problemas como por ejemplo:
addslashes()
htmlspecialchars()
htmlentities()
La validación en cambio dependerá del Modelo de la aplicación y sus reglas de negocio.
Como sanear y validar son cuestiones distintas, siempre hay que hacer ambas.
Generalmente es mejor idea primero sanear y después validar, ya que el dato en concreto con el que se trabajará será el dato ya saneado, y sobre él se verificarán las validaciones del modelo.
Espero te aclare algunas cosas la respuesta. Saludos cordiales.
Hola, mira yo hago así y quizas te ayude en lo que necesitas
Paso lo datos provenientes del formulario por una función que me certifique que no hay una injección de datos mal intencionada.
Valido los datos
4...... ps le digo al usuario "EXITO!!!"
Y creo que ya, es algo así lo que estabas preguntando?
Buenas Elvis.
Yo haría ambas cosas por 2 razones.
Como bien dices en tu pregunta posterior, la validación solo te va a decir que los datos introducidos tienen el formato especificado y seguramente ya te habrás ocupado de que puedas tener un problema de injección de código. Por decirlo de alguna manera,la validación la haces del lado del cliente.
Pero de parte del servidor también debes hacer esa "validación" (Sanitizar) si quieres estar seguro de que lo que añades en tu BBDD es algo totalmente seguro.
Un saludo.
En mi opinión el orden dependerá siempre de tus necesidades, aunque por lo habitual creo que deberías validar y después sanitizar.
Te pongo un ejemplo donde afecta el orden:
$passw1 = ' passw1 ';
$passw2 = '"passw2';
function sanitize($str){
return addslashes(trim($str));
}
function validate($str){
return strlen($str)>7;
}
function check($str){
if(validate($str)) echo $str.' is valid(1) <br />';
if(validate(sanitize($str))) echo $str.' is valid(2) <br />';
}
check($passw1);
check($passw2);
Básicamente lo que hace el código es ejecutar la función check()
donde se valida primero, y luego se valida después de sanitizar.
La función sanitize()
limpia espacios no deseados al comienzo y final de la cadena, y añade "\" a las comillas.
La función validate()
comprueba que el tamaño del string sea 8 como mínimo.
check()
será passw1 is valid(1)
ya que loscheck()
será "passw2 is valid(2)
, y ocurre justo lo contrario que el caso anterior, ya que inicialmente el tamaño del string no pasa la validación, pero la barra "\" de escape que añade a la comilla doble afecta al tamaño, pasando la segunda validación.De todas formas, por lo general creo que sería mejor validar, ya que atendiendo a términos de optimización (aunque rara vez tendrá relevancia aquí) la validación te puede "ahorrar" el paso de la sanitización si no pasa la validación. En cambio, al contrario nunca te ahorraría de validar.
hola, en mi caso yo valido desde javascript y limpio desde php, te paso el codigo de la validacion via javascript, ojo este codigo no comprueva si los valores son correcto, ej: que el emil sea valido o el telefono tenga solo numeros, es para validar cualquier formulario y si algun campo esta vasio te lo resalta en rojo y luego se lo realta en verde para indicar que ya lo cempletaste.
function validar(formulario, espera)
{
var i=0;
var s=formulario.elements.length-1;
for (i=0;i<=s;i++)
{
switch (formulario.elements[i].type)
{
case 'text':
if(formulario.elements[i].value.length==0)
{
formulario.elements[i].style.borderColor='red';
formulario.elements[i].focus();
return 0;
}
else
{
if(formulario.elements[i].style.borderColor=='red')
{
formulario.elements[i].style.borderColor='green';
}
} break;
case 'textarea':
if(formulario.elements[i].value.length==0)
{
formulario.elements[i].style.borderColor='red';
formulario.elements[i].focus();
return 0;
}
else
{
if(formulario.elements[i].style.borderColor=='red')
{
formulario.elements[i].style.borderColor='green';
}
}
break;
case 'select-one':
if (formulario.elements[i].selectedIndex==0)
{
cadena = /--/
if(cadena.test(formulario.elements[i].value))
{
formulario.elements[i].style.borderColor='red';
formulario.elements[i].focus();
return 0;
}
else
{
if(formulario.elements[i].style.borderColor=='red')
{
formulario.elements[i].style.borderColor='green';
}
}
}
break;
}
}
if (espera=='true')
{
formulario.style.display='none';
document.getElementById('espera').style.display='block';
}
formulario.submit();
}