Leyendo hace unos días sobre los 25 errores más graves de la programación web en
http://www.sans.org/top25errors/#cat1, veo que uno de los primeros es no validar datos de entrada y de ahí que pueda darse la inyección de código, inyección sql, ejecución de comandos sobre el servidor entre otras cosas..
Una forma rápida de evitar la inyección de código es crear sentencias de escape sobre los datos capturados, esto para que no se pueda crear una finalización de consulta sql, por ejemplo:
En php para validar un login y password es muy común hacer esto:
" select * from users where login=\"$_POST[login]\" and password=md5($_POST[\"password\"]) "
Si no validamos los datos de entrada aquí estuviera un posible error y agujero de seguridad para inyección sql, por lo que el primer paso que se me ocurre rápidamente es agregar sentencias de escape tal como en el siguiente código..
function escapeInputData($_array){
//echo count($_array);
foreach(array_keys($_array) as $key){
if(is_array($_array[$key])){
$_array[$key] = escapeInputData($_array[$key]);
}else{
$_array[$key] = addslashes($_array[$key]);
}
}
return $_array;
}
Este código se tendría que llamar al principio de cada archivo php que use variables por POST o GET, de tal forma que su uso sería
$_POST = escapeInputData($_POST);
$_GET = escapeInputData($_GET);
Con esto estamos procesando los valores de POST y GET y les agregamos sentencias de escape cuándo asi lo amerite..
Dejar un comentario