jueves, 11 de agosto de 2011

Asegurar código PHP heredado.

Estoy revisando una aplicación en PHP, ya hace lo que debe hacer, ya está en español, tiene las modificaciones necesarias .... ahora falta asegurarla.

Creo que al menos 2 procesos básicos son los necesarios, protegerla de SQLi y de RFI. (inyección de código SQL e Inclusión de archivos remotos).

Para el primer punto, hay que "limpiar" las entradas que recibe la aplicación del usuario, considerando que los usuarios pueden ser hostiles.

se me ocurren 2 cosas addslashes y mysql_real_escape_string, las cuales escapan los caracteres ' " NULL y les antepone \ y puede servir para almacenar contraseñas del tipo ' or ''=''

Al parecer la más recomendada es mysql_rel_escape_string, solo que debes tener un enlace a la base de datos, porque el trabajo lo hace el mysql.

La verdad preferiría poder utilizar algún patron de diseño que me protegiera del SQLi, pero sería reescribir casi toda la aplicación. así que mejor utilizaré el escape.

vienen unas lines que podrían ser muy útiles y rápidas de implementar :

$_GET = array_map('mysql_real_escape_string', $_GET);
$_POST = array_map('mysql_real_escape_string', $_POST);
$_COOKIE = array_map('mysql_real_escape_string', $_COOKIE);
$_REQUEST = array_map('mysql_real_escape_string', $_REQUEST);
En esta presentación sobre SQLi también recomiendan utilizar procedimientos almacenados.

Otro punto muy IMPORTANTE de la presentación:
Filtra/valida las entradas escapa las salidas.

Para escapar las salidas, puedes utilizar htmlentities, a menos que permitas HTML almacenado o como parámetros, de otra forma, puedes evitar también ataques XSS.

Estas recomendaciones también se muestran acá. Donde es todo un lista de cotejación para ver si tu aplicación está asegurada.

Por último, no dejes sola la aplicación, revísala constantemente junto con sus logs. Tal vez alguién ya metió gol y tu todavía no sabes.



No hay comentarios:

Publicar un comentario