NorfiPC
NorfiPC » Informaciones » Como proteger los formularios web

Como proteger los formularios y evitar la inyección de código SQL en PHP


Compartir en Google Compartir en Facebook Compartir en Twitter Pinear imágenes en Pinterest
Códigos y ejemplos prácticos para impedir el hacking, inyección SQL y el XSS en las páginas de un blog o sitio web. Como usar captchas, convertir, bloquear y escapar caracteres peligrosos. Como comprobar la seguridad de los formularios.
Como proteger los formularios y evitar la inyección de código dañino SQL en PHP
En las páginas de internet son muy empleados los formularios o formas en diversos usos, para autentificarse, contactar, enviar correos, agregar comentarios, hacer búsquedas, etc.
Hacen las páginas mucho más atractivas, útiles e interactivas para los lectores, pero traen un riesgo enorme para la seguridad de un blog o sitio web.
Son la puerta de entrada de la gran mayoría de los ataques, el hacking, la inyección de código SQL y XSS.



¿Qué es la inyección de código SQL y los ataques XSS?


Los ataques más peligrosos en la actualidad que atentan contra la seguridad de un sitio web son dos: La Inyección de código SQL y XSS, abreviaturas de Cross-site scripting.
Inyección SQL es la infiltración de código intruso dentro del código SQL de las bases de datos generalmente usando las entradas de los formularios.
El objetivo es alterar el funcionamiento del programa y lograr que se ejecute el código "invasor" incrustado.
Es una técnica poderosa con la que se puede manipular direcciones URL de cualquier forma, en entradas de búsquedas, formularios o registros de email, para inyectar el código.
XSS es la inyección de código JavaScript en aplicaciones web, páginas web y hasta en el navegador web ya sea en código insertado (script, iframes) en HTML, aprovechando las variables que se pasan entre páginas usando una URL o robando las cookies.
Ataca principalmente las aplicaciones que procesan datos obtenidos de una entrada sin ningún tipo de chequeo o validación.



¿Cómo evitar la inyección SQL y el XSS o Cross-site scripting?


Hay varias reglas de seguridad elementales que debemos tener en cuenta.
Principalmente proteger todas las puertas que abrimos en nuestras páginas con la mejor de las intenciones, que son las entradas en los formularios o cualquier elemento que utilice la etiqueta <input>.
En este artículo tratamos solo algunas de ellas que son imprescindibles.

Usar captchas en los formularios para validar las peticiones de los usuarios


Captcha es la abreviatura en ingles de "Prueba de Turing pública y automática para diferenciar máquinas y humanos".
Es una prueba para comprobar que quien introduce la información es una persona y no una máquina.
Se utilizan para impedir que se pueda tener acceso a la función de un script de forma automática.
Para eso se emplean pequeñas imágenes que representan caracteres, en ocasiones distorsionados, los que el usuario tiene que introducir en un cuadro manualmente y de coincidir, se ejecuta la función solicitada.
Estas imágenes se escriben mediante PHP, creando un pequeño archivo con solo unas líneas de código y vincularlo al formulario y viceversa.

Ejemplo de un formulario con un Captcha


El siguiente ejemplo muestra un sencillo formulario que al introducir el texto correcto realiza una acción sencilla, en este ejemplo escribe el valor de la variable que es el nombre introducido por el usuario.
Introduce tu nombre:

Introduce los caracteres que ves en la imagen
Numeros aleatorios


El código empleado en el formulario y en el archivo para crear la imagen de la captcha, puedes copiarlo a continuación.



Código del formulario con un Captcha



Código para crear una imagen en PHP

Para crear el archivo que escribe la imagen, copia el código a un archivo de texto y renómbralo como: "image.php"

Para personalizar la imagen creada puedes cambiar los valores en las siguientes variables:
$img_handle. El ancho y la altura de la imagen
$back_color. El color del fondo
$txt_color. El color del texto
El tamaño de la fuente es imposible hacerlo mayor a no ser que uses un archivo de fuente TTF en el servidor y hagas referencia a él.
Para crear una imagen es necesario que este habilitada la librería GD incluida en PHP.
Lee más información detallada y copia los códigos para crear imágenes con PHP, sencillas como esta o mucho más vistosas y accesibles: Códigos para crear imágenes y gráficos con PHP



Crear limitaciones y reglas en los formularios


En cualquier formulario es necesario usar ciertas reglas para limitar las acciones de acuerdo a su uso.
Se debe utilizar como método en los formularios POST en vez de GET.
En las entradas para introducir contraseñas, en ver de <input type="text"> se debe emplear: <input type="password">
En las entradas de texto se puede limitar la cantidad de caracteres usando el atributo "maxlength".
En los formularios usados para subir archivos como imágenes, fotos, etc. puede limitarse el tipo de archivo a subir, basado en su extensión, así como regular su tamaño.
Lee más información: Como subir fotos, imágenes y otros archivos a un servidor web

Impedir la entrada de código maligno escapando los caracteres


Para evitar las inyecciones SQL y ataques XXS es necesario escapar todo lo que pueda ser introducido en cualquier consulta, reemplazando los caracteres especiales por su equivalente textual, de tal forma que se interprete todo el contenido de la variable como si fuera texto.
Se conoce como "satinizar" las entradas.
Para eso se pueden emplear distintas funciones, de acuerdo al lenguaje de programación usado.
En las entradas de los formularios que reciben comentarios y texto se pueden usar los siguientes métodos.



Convertir caracteres especiales con htmlspecialchars


Htmlspecialchars() es una función de PHP que convierte los caracteres especiales en entidades HTML.
Convierte los siguientes caracteres:
& (ampersand) - &amp;
" (comillas dobles) - &quot;
' (comilla simple) - &#039;
< (menor que) - &lt;
> (mayor que) - &gt;
Se utiliza de la siguiente forma:
htmlspecialchars('texto a escapar')
Un ejemplo de su uso en un sencillo formulario:


Proteger formularios de XSS

La dirección URL en el atributo "action" de los formularios, cuando conduce a la misma página donde se ejecuta, puede ser manipulada para inyectar código maligno usando Javascript.
Es uno de los métodos de XSS (Cross-site scripting).
Se evita usando "htmlspecialchars()" de la siguiente forma:

Lee más información detallada en W3School: PHP 5 Form Validation



Escapar caracteres especiales con addslashes


La función addslashes() en PHP agrega barras invertidas a una cadena.
Devuelve una cadena con barras invertidas delante de los caracteres que necesitan escaparse en situaciones como consultas de bases de datos, etc.
Los caracteres que se escapan son la comilla simple ('), comilla doble ("), barra invertida (\) y NUL (el byte NULL).
Este método se conoce como "satinizar".
Se utiliza de la siguiente forma:
addslashes ('texto a escapar')
Para usarlo en el formulario anterior solo es necesario agregar la segunda línea:
$consulta = $_POST['consulta'];
$consulta = addslashes($_POST['consulta']);
Puedes probar esta opción en el primer formulario, insertando alguna palabra que contenga cualquiera de los caracteres anteriores.

Todas las funciones en un script


La función anterior htmlspecialchars, asi como addslashes() y trim() podemos usarlas al mismo tiempo en las entradas de cualquier formulario usando un script similar al siguiente.
Solo debemos definir las variables que usamos en nuestros formularios.


Bloquear todos los caracteres especiales que no sean letras ni números


Es otro método que devuelve un mensaje de error cuando se introduce en una entrada los caracteres que no son aceptables.
Para eso se puede usar una función similar a la siguiente:

Comprueba la función anterior en el siguiente formulario, tratado de introducir cualquier carácter no valido.
Introduce tu nombre:


Tu nombre es:


Como comprobar la seguridad de los formularios ante inyecciones SQL


Las anteriores son solo algunas reglas elementales.
La lucha contra el hacking y los ataques en internet es muy compleja y muchas las técnicas utilizadas por los atacantes.
Usar scripts en PHP en las páginas siempre trae aparejado mucho peligro.
Al implementar en cualquier página un formulario o cualquier entrada, se puede probar su vulnerabilidad ante las inyecciones SQL usando la extensión de Firefox SQL Inject Me.
Comprobando si un formulario de esta página es vulnerable a la inyección SQL con la extensión SQL Inject Me.
Comprobando si un formulario de esta página es vulnerable a la inyección SQL con la extensión SQL Inject Me
Otra extensión llamada XSS ME permite comprobar en cualquier página o aplicación web el peligro de ataques XSS.
Las dos extensiones anteriores simulan ataques en las formas seleccionadas en una página y muestran el resultado.
Los de conocimientos más avanzados y con más paciencia pueden encontrar en la siguiente página el código para hacer varias pruebas manualmente. Basic Tests for SQL-Injection Vulnerabilities
Los que poseen sitios en WordPress deben leer en detalle el siguiente artículo: Hardening WordPress

Otras páginas relacionadas



Síguenos en las redes sociales de internet


Norfi Carrodeguas en Google+ Trucos de NorfiPC en Facebook @NorfiPC en Twitter NorfiPC en Pinterest

Buscar en este sitio



 
Inicio | Mapa del sitio | Sobre mí | RSS