PHP es un poderoso lenguaje e intérprete, ya sea incluido como
parte de un servidor web en forma de módulo o ejecutado como un
binario CGI separado, es capaz de acceder a
archivos, ejecutar comandos y abrir conexiones de red en el
servidor_ Estas propiedades hacen que cualquier cosa que sea ejecutada
en un servidor web sea insegura por naturaleza_ PHP está
diseñado específicamente para ser un lenguaje más
seguro para escribir programas CGI que Perl o C, y con la
selección correcta de opciones de configuración en
tiempos de compilación y ejecución, y siguiendo algunas
prácticas correctas de programación, PHP le puede dar la
combinación precisa de libertad y seguridad que usted necesita_
Ya que hay muchas maneras de utilizar PHP, existen varias opciones de
configuración diseñadas para controlar su
comportamiento_ Un amplio rango de opciones le garantizan que pueda
usar PHP para muchos propósitos distintos, pero también
quiere decir que hay combinaciones de éstas opciones y
configuraciones de servidor que pueden resultar en un entorno
inseguro_
El nivel de flexibilidad en la configuración de PHP se compara
quizás solo con su flexibilidad de desarrollo_ PHP puede ser
usado para escribir aplicaciones completas de servidor, con todo el
poder de un usuario de un intérprete de comandos, o puede ser
usado para inclusiones simples del lado del servidor con muy poco
riesgo en un entorno minuciosamente controlado_ Cómo construir
ese entorno, y qué tan seguro es, básicamente depende
del desarrollador PHP_
Este capítulo comienza con algunas recomendaciones generales de
seguridad, explica las diferentes combinaciones de opciones de
configuración y las situaciones en las que pueden ser usadas
con seguridad, y describe diferentes consideraciones a la hora de
programar para diferentes niveles de seguridad_
Consideraciones generales
La pretensión de contar con un sistema completamente seguro es
prácticamente un imposible, de modo que el enfoque usado con
mayor frecuencia en la profesión de seguridad es uno que busque
el balance adecuado entre riesgo y funcionalidad_ Si cada variable
enviada por un usuario requiriera de dos formas de validación
biométrica (como rastreo de retinas y análisis
dactilar), usted contaría con un nivel extremadamente alto de
confiabilidad_ También implicaría que llenar los datos
de un formulario razonablemente complejo podría tomar media
hora, cosa que podría incentivar a los usuarios a buscar
métodos para esquivar los mecanismos de seguridad_
La mejor seguridad con frecuencia es lo suficientemente razonable como
para suplir los requerimientos dados sin prevenir que el usuario
realice su labor de forma natural, y sin sobrecargar al autor del
código con una complejidad excesiva_ De hecho, algunos ataques
de seguridad son simples recursos que aprovechan las vulnerabilidades
de este tipo de seguridad sobrecargada, que tiende a erosionarse con
el tiempo_
Una frase que vale la pena recordar: Un sistema es apenas tan bueno
como el eslabón más débil de una cadena_ Si todas
las transacciones son registradas copiosamente basándose en la
fecha/hora, ubicación, tipo de transacción, etc_ pero la
verificación del usuario se realiza únicamente mediante
una cookie sencilla, la validez de atar a los usuarios al registro de
transacciones es mermada severamente_
Cuando realice pruebas, tenga en mente que no será capaz de
probar todas las diferentes posibilidades, incluso para las
páginas más simples_ Los datos de entrada que usted
puede esperar en sus aplicaciones no necesariamente tendrán
relación alguna con el tipo de información que
podría ingresar un empleado disgustado, un cracker con meses de
tiempo entre sus manos, o un gato doméstico caminando sobre el
teclado_ Es por esto que es mejor observar el código desde una
perspectiva lógica, para determinar en dónde
podrían introducirse datos inesperados, y luego hacer un
seguimiento de cómo esta información es modificada,
reducida o amplificada_
Internet está repleto de personas que tratan de crearse fama al
romper la seguridad de su código, bloquear su sitio, publicar
contenido inapropiado, y por lo demás haciendo que sus
días sean más interesantes_ No importa si usted
administra un sitio pequeño o grande, usted es un objetivo por
el simple hecho de estar en línea, por tener un servidor al
cual es posible conectarse_ Muchas aplicaciones de cracking no hacen
distinciones por tamaños, simplemente recorren bloques masivos
de direcciones IP en busca de víctimas_ Trate de no convertirse
en una_