Uno de los lenguajes de programación más populares en el desarrollo de sitios web, es sin duda PHP. Es bien cierto que PHP es un lenguaje muy sencillo y muy completo, sin embargo, si no tenemos el cuidado necesario, podemos caer en ciertos agujeros de seguridad.

Veamos tres consejos para evitar las más comunes fallas de seguridad en PHP.

1.       Usa mensajes de error que sean apropiados.

Durante la fase de desarrollo, los mensajes de error son nuestros mejores aliados, pues nos ayudan a encontrar errores sintácticos, datos incorrectos, entre otros. Repito, son amigos durante el desarrollo, pero, una vez en línea, se convierten en el enemigo, mostrando a los usuarios información importante sobre tu aplicación, como por ejemplo, nombre de la base de datos, estructuras, variables, archivos que se ejecutan, y un largo etcétera.

Es por esta razón que debes asegurarte de haber ocultado los reportes de errores. ¿Cómo hacerlo? Muy sencillo,  coloca la siguiente línea de código al inicio de tus archivos:

error_reporting(0)

La función error_reporting(nivel de error) establece la directiva error_reporting en tiempo de ejecución. Al pasarle el valor 0, desactiva todas las notificaciones de errores. También es importante saber, que al pasar el valor -1, se mostrarán todos los errores posibles.

2.       Valida las entradas de usuario (inputs)

Seamos sinceros, en la mayoría de aplicaciones que desarrollamos (si no es que en todas), sabemos que tipos de datos esperamos, como ejemplo: fechas, números, textos, contraseñas, direcciones de correo, teléfonos, etc., por lo que, no tenemos excusa para no validar lo que el usuario está ingresando. Si quieres protegerte de posibles ataques, asegúrate de que tus usuarios solo puedan ingresar datos apropiados (el tipo de dato que esperas, y no más)

¿Cómo hacerlo? La mejor manera es usando expresiones regulares. Puedes encontrar una lista de las más comunes y solicitadas en este enlace

Para el manejo de expresiones regulares en php, está la función preg_match(). Ejemplo:

if ( ! preg_match( “^([a-zA-Z]|[0-9])+$”, $GET_[‘user’]))
{
//handle error
}

En el ejemplo, validamos que la variable ‘user’ sea estrictamente una cadena alfanúmerica.  Como consejo personal, asegúrate de no permitir signos como el igual (=), la coma (,),  las comillas simples (‘) y el guión medio (-).

En cada validación, si el dato proporcionado por el usuario no coincide con el formato que esperamos, muéstrale al usuario un mensaje de error o hazle saber cómo debe de ingresar la información.

3.       Previene los ataques XSS (Cross Site Scripting)

En la actualidad, la mayoría de las aplicaciones web son interactivas, lo cual implica que muchas de las entradas del usuario son mostradas de alguna manera, por lo tanto, permitir HTML en una entrada resulta peligroso, puesto que permite que Javascript sea ejecutado.

Hay algunas maneras de protegerse de estos ataques, la mejor, desde luego, es no permitir HTML completo, aunque muy probablemente ésta sea una opción para aplicaciones tipo foros o blogs.

Para estos casos, quizás prefieras solo permitir ciertos tags o permitir BBCode para permitir que tus usuarios le den cierto formato personalizado  sin que sea un riesgo para ti.

También puedes filtrar la entrada a través de la función htmlentities() cada vez que imprimas el valor de una variable de entrada en la salida.

echo("

You typed this:

“); echo(”

“); echo(htmlentities($_POST[‘myText’])); echo(”

“);

Estos son solo algunos ejemplos de lo que puedes hacer para que tus aplicaciones web sean más seguras. La seguridad en la web es un tema tan importante tanto como su tamaño (gigante). Recuerda, que como desarrollador web, es tu responsabilidad la seguridad de tus aplicaciones, así como mantenerte actualizado en lo que refiere a esta temática. Si quieres aprender más, en el manual de php hay una sección extensa sobre Seguridad

Author

Mary Soco Ortiz es una apasionada de la tecnología que profesionalmente se dedica al desarrollo de soluciones web. Ingreso en el mundo del blogging en 2010, convencida de que el Internet cambiaría nuestra forma de ver el mundo.

Write A Comment

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.