2009-08-03 16 views
42

Acabo de obtener un concierto PHP5. No manejaré las partes de la aplicación que involucran datos súper confidenciales, pero todavía sé muy poco sobre los métodos de seguridad y encriptación. Solo conozco los conceptos básicos (no almacene contraseñas en texto plano, no permita que los usuarios ejecuten código usando datos de publicaciones, etc.). ¿Qué necesito saber para mantener seguras mis aplicaciones y dónde puedo aprenderlas?¿Qué debería saber todo desarrollador web sobre el cifrado?

+16

¿No debería ser la pregunta "¿Qué debería saber todo desarrollador web sobre la seguridad"? La encriptación es solo una parte de tu pregunta, ¿verdad? –

+9

nyylbharrqgbxabjnobhgrapelcgvbapnaorsbhaqguvegrrapunenpgrefnjnl – Instantsoup

+0

ebg13vffghcvqnaqunfnofbyhgrylabcynprvanqvfphffvbapbirevatfrphevgl – NotMe

Respuesta

27

Aprender la diferencia entre valores hash y cifrado. Los cifrados generalmente son interpretaciones bidireccionales de una cadena. Puedo encriptar mi contraseña y luego descifrarla en texto plano nuevamente. La idea detrás de hashes es que se conviertan en un 'cifrado' de una sola vía.

En mis sitios guardo las contraseñas como hash. Cada vez que un usuario inicia sesión, vuelvo a codificar la contraseña provista, la prueba contra el hash almacenado en la base de datos y apruebo si coinciden. No puedo enviarles su contraseña si la olvidan, ya que (en general) no tengo forma de saberlo. Dos cadenas diferentes pueden traducirse en el mismo hash, lo que hace que (generalmente) sea imposible saber cuál fue la cadena original.

Este es un problema que es bueno comprender bien y discernir cuándo usar cifrado frente a hash.

+1

El hash de contraseñas como este solo tiene un valor limitado. Claro, no puede ver la contraseña de texto sin formato, pero si el hash es siempre el mismo, no lo necesita para comprometer un sistema con un hombre en el ataque medio. – Thorarin

+6

@Thorarin: ¿Valor limitado? La técnica de almacenar una contraseña hash y compararla con un hash de la contraseña dada es una práctica común. SSL está ahí para evitar un hombre sobre el cable en el medio o un ataque de repetición. Exigir que todos lleven un llavero RSA (o equivalente) sería ideal, pero no es práctico (todavía). Y si el usuario tiene malware en su computadora, están jodidos de cualquier manera, así que ni siquiera vayamos allí. –

+1

Hashing es casi inútil sin sal; haga una búsqueda en Google de 'tablas arcoiris' para ver cómo los valores hash sin sal se pueden comprometer fácilmente. –

0

En primer lugar hay que familiarizarse con estos métodos PHP:

Here usted tiene todas las extensiones de criptografía en PHP.

+2

md5 es tan bueno como roto hoy en día, debido a las tablas de arcoíris. – Macha

+2

Eso es un poco exagerado. Es suficiente agregar una sal y la mesa del arcoíris es inútil. –

+3

Se han encontrado colisiones MD5. Nadie ha demostrado aún ninguna colisión SHA1. –

6

La respuesta corta

Nunca se puede estar demasiado seguro

Uso Salted Hashing de contraseñas para mayor seguridad

La respuesta más larga (todavía no está completo, sin embargo)

La seguridad no es algo que aprender con un tutorial rápido en la web. Requiere un conocimiento profundo no solo de las vulnerabilidades que existen, sino también de POR QUE existen y CÓMO funcionan. Uno de los mayores problemas (especialmente en código abierto) es que los nuevos métodos se agregan todo el tiempo, por lo tanto, debemos comprender conceptos de seguridad y teoría.

Lea libros, tome clases y pruebe las vulnerabilidades usted mismo en una máquina local. Luego, lentamente comienzan a comprender el concepto detrás de cómo proteger una aplicación web.

Pagar lo siguiente para que comenzar

  1. Developer's Guide to Web Application Security
  2. Web Security Testing Cookbook
  3. Applied Cryptography
11

Que se puede romper no importa lo que hagas.

+6

+1 y la verdad en la mayoría de los casos es que escribir tus propias rutinas es una jugada estúpida. – Fredrik

+0

Esto no es informativo en absoluto. Se trata de administrar los riesgos. Tampoco puedes evitar la muerte en los hospitales. En realidad, no puedes evitar la muerte en absoluto. Eso no significa que los hospitales sean inútiles. Por sí mismo, esta declaración no tiene sentido. –

17

Sepa que no escriba su propia funcionalidad de cifrado. Una biblioteca existente y confiable es la mejor manera de ir donde sea posible. Evite las tecnologías innovadoras que carecen de muchas horas exitosas de programador y horas de usuario detrás de ellas. Sepa que no confíe en la funcionalidad que elija hasta que la haya probado completamente, en primera persona. Manténgase al tanto de los nuevos desarrollos que pueden contrarrestar la funcionalidad elegida durante la noche. Sepa que solo porque está utilizando la mejor tecnología de cifrado disponible hoy en día que no ha protegido nada si deja las claves sobre la mesa (por ejemplo, texto sin formato no está en un caché o almacenado en otra tabla en la misma base de datos, claves privadas dejó a la intemperie)

15
  • entender la diferencia entre encrypting y hashing
  • entender la razón de salts
  • Entender que HTTP es sin cifrar
  • Comprender lo HTTPS es
  • understa nd que nunca (casi nunca) podrá crear mejores métodos de codificación o hash que las librerías de terceros y las bibliotecas incorporadas.
14
+2

¿Quieres decir, como, la cuenta yahoo de la Sra. Palin? – Smandoli

+1

No estoy de acuerdo, por ejemplo, ahora tengo 4 contraseñas. Creo que si tengo 1 contraseña no necesitaría escribirla, pero solo puedo escribir la contraseña incorrecta 3 veces, así que no puedo recordarla y tengo que escribirla. – IAdapter

+0

@ 01: Este problema se mitigaría si más compañías comenzaran a usar frases * de pase * en lugar de contraseñas. Es mucho más fácil recordar una frase que una cadena aleatoria de caracteres, y mucho más difícil buscar una frase en un diccionario. Esto ** es ** una deficiencia tecnológica, y una que está exacerbando una debilidad humana. –

3

Por favor, preste atención a los siguientes puntos cuando vaya a guardar las contraseñas,

  1. La contraseña hash es generalmente más segura porque no tiene que guardar un secreto. Sin embargo, le impide utilizar otro esquema basado en hash en su flujo de autenticación. Por ejemplo, no puede usar la autenticación HTTP Digest con contraseña hash.

  2. El hash simple es propenso a atacar la tabla del arco iris (http://en.wikipedia.org/wiki/Rainbow_table). Agregue un nonce no recurrente al hash o use el nonce como clave para HMAC. El nonce necesita ser almacenado con las contraseñas. Lo antepongo al resumen.

  3. Si se utiliza el cifrado, asegúrese de utilizar un Vector inicial aleatorio, de modo que la misma contraseña se codificará en diferentes textos cifrados para diferentes usuarios. De lo contrario, eres propenso al ataque de coincidencia de patrones. MySQL tiene un comando de encriptación incorporado. No inyecta IV así que nunca lo use para contraseñas.

  4. Guarde el nombre/la versión de la clave con el texto cifrado para poder girar las teclas. Se requiere rotación de teclas para cumplir con ciertos estándares. El cifrado sin información clave es imposible de descifrar cuando se ve obligado a cambiar o rotar las teclas.

Si sigues estos consejos, tus contraseñas estarán seguras con cualquier esquema de encriptación/hash.

+0

"Agregue un nonce recurrente al hash" - ¿Quiere decir una sal? – hannson

+0

La sal normalmente se refiere a agregar algo al hash. Nonce es una especie de género que solo puede usarse una vez. –

+0

¿Nonce ?! Ese es un concepto llamado desafortunadamente. – UpTheCreek

1

Echa un vistazo a Open Web Application Security Project. Tienen mucha información sobre los problemas actuales de seguridad de la aplicación web y sobre lo que debe hacer para defenderse de ellos. OWASP está armando un Development Guide que proporciona mucha información buena sobre aplicaciones web y problemas de desarrollo de servicios web.

1

Si usted está mirando desde un contexto PHP, me gustaría recomendar este libro:

alt text http://ecx.images-amazon.com/images/I/51sKhc8YUlL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

Pro PHP Security on Amazon

Lo que me gusta de este libro es que abarca mucho más que solo una lista de las funciones relacionadas con la seguridad en PHP. Una gran parte de este cubre conceptos generales de seguridad web y mecanismos de protección. Permisos, principio de privilegio mínimo, cifrado, hash, scripts entre sitios, falsificaciones de solicitudes entre sitios, secuestro de sesión, etc. están todos cubiertos aquí, con ejemplos de escritura de código seguro en PHP.

Después de haber tomado clases de seguridad de posgrado en la universidad, estoy impresionado con la cobertura de este libro. Considero que es una lectura obligatoria para cualquier desarrollador profesional de PHP.

Cuestiones relacionadas