Jump to content

Recommended Posts

Hola amigos, espero que estén bien.

Sucede que estoy en un proyecto muy importante y quiero mejorar la seguridad (si es que se puede) de éste. Sé usar las variables SESSION, y por ahí paso casi todos los parámetros, para que no se puedan escribir sentencias por url. También utilizo en los "input text" la variable str_replace para reemplazar los caracteres ,\\,<,>,\. Pero como siempre los demás saben más que yo, ¿entonces que más podría utilizar para estar seguro?. Gracias.

Link to post
Share on other sites

Si vas a usar bases de datos, recuerda que todos pasar todos los datos que te mande el usuario por un mysql_real_scape_string() o mysqli::scape_string(), según sea el caso, es una de las cosas más básicas, ya que de no hacerlo, podrán hacer inyección SQL.

 

Ahora para todos los datos que van a ser mostrados en pantalla, debes que esquivar el html. Para eso hay una función muy útil llamada htmlentities(), con está función lo que logras es convertir los caracteres especiales como <, > en su versión "visible" html, es decir: $#60; y $#62.

Como alternativa está la etiqueta strip_tag, que su función es, eliminar todas las etiquetas html, por ejemplo:

Esto: <a href="google.com">hola</a>

Lo convierte a: hola.

OJO, htmlentities admite como segundo argumento los "allowtags", es decir, etiquetas permitidas, PERO NO DEBES PERMITIR NINGUNA. La razón es sencilla, y es que htmlentities no tiene una forma de filtrar atributos, es decir, si tu permites poner link, por medio de de un atributo pueden insertar código javascript. Ejemplo:

<a onload="mi código maligno aquí"></a>.

 

Algunas recomendaciones extras:

Presta atención especial a la validación de formularios de contacto, debido a que, si por ejemplo tú permites escribir una dirección de correo, y esa dirección de correo va a pasar a las cabeceras del mail que vas a enviar, te pueden inyectar "cabeceras", y con ello mandar spam desde tu servidor.

 

Otra recomendación es, no permitir que tu página sea incrustada en iframes, ya que con esto alguien podría hacer Clickjacking. Que consiste en poner tu página en opacidad 0, delante de otra página, la pagina 2, tendría un botón tentador de cliclkear, y así se lograría que en realidad den click a un enlace de tu página. Esto puede ser o no peligroso, según lo que se hace en tu página. Por ejemplo ¿Te imaginas que tienes un sistema de mensajes, donde el contenido se puede rellenar por get? Entonces un hacker podría hacer que usuarios publiquen mensajes falsos sin darse cuenta.

 

Una forma de romper los iframes sería así:

if (window != window.top)
top.location.href = location.href;

 

Y hablando de Get, es recomendable evitarlo, y sólo usarlo en caso de que sea realmente necesario, y desde luego, nunca pasar información sensible o privada por ahí.

 

En cuanto a la variable session, la verdad es realmente muy útil, ya que es una "cookie" inteligente, es decir session no guarda nada de la información que le pasas, sino que sólo almacena un ID, y toda la información se guarda en el servidor, por lo cuál es mucho mejor que la variable cookie. Eso si, tampoco te sobre-confíes, aunque el usuario no pueda modificar los datos de session (y adivinar la id de otro es demasiado difícil al estar hasheada), si vas a guardar datos recibidos por el usuario en session, no olvides escapar los string.

 

Otro consejo básico (aunque supongo que ya lo debes conocer), es no guardar las contraseñas en texto plano, sino hasheads. No te recomiendo usar MD5, ya que hay diccionarios de contraseñas basados en MD5 muy gordos, te recomiendo mejor un sha512 con un salt, el salt es lo que evitará que los hash sean vulnerables a diccionarios y por lo tanto debe se secreto.

Desde luego nunca debemos olvidarnos de los ataques de fuerza bruta, la manera más eficiente de evitarlos es que los logins (al segundo o tercer intento fallido), pidan rellenar un Captcha, obviamente entre más fuerte el captcha mejor. Re-captcha a resultado ser bastante duro de romper.

 

Y antes de que se me olvide, otra cosa importante, que no tiene que ver con PHP, pero sí con seguridad (y mucho), es usar certificados SSL para cifrar las páginas y así no sean visibles para cualquiera en caso de que el usuario se conecte a una red pública. ¿Has oído de firesheep? Si no, busca por youtube, y verás lo que te digo. Es preferente que los certificados SSL sean permanentes. Muchas páginas sólo los usan en la pantalla de login, y eso protege la contraseña sí, pero pueden secuestrar la cookie del usuario (en este caso session), y eso basta para loggearse a cuentas ajenas.

 

Y bueno esas son las recomendaciones básicas, aunque nada es suficiente contra los hackers más creativos.

Edited by dnL7up
Link to post
Share on other sites
  • 2 months later...

Hola benitezluis y demás foreros (tiempo hacía que no me pasaba por macuarium).

 

A ver: Los consejos de Dnl7Up son todos válidos y y elementales a poco que quieras proteger mínimamente tu aplicación, pero si necesitas SEGURIDAD de la buena no es suficiente, ya que los ataques te podrían venir por otro lado. Me explico: eso te bastaría para evitar a los script kiddies y algún tontolhaba experimental con ganas de joder la marrana, pero si lo metes en un servidor cuya seguridad pueda verse comprometida por ejemplo, mediante acceso ssh o telnet como he visto más de uno, ya puedes dejarte los cuernos securizando tu código que te van a entrar por otro lado.

 

Por eso te digo que lo que te comenta dnl7up es esencial, pero que si te vas a responsabilizar de la seguridad del website y este NECESITA ser seguro, habla con algún profesional y busca un buen server (no escatimes). Supongo que como siempre todo depende del dichoso presupuesto ;)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.