2009-02-02 21 views
9

Voy a estar construyendo una aplicación web pronto, donde necesitaré tener un modelo de seguridad para que diferentes usuarios tengan acceso a diferentes partes de la aplicación y/o diferentes conjuntos de datos dentro de esas partes específicas de la aplicación. Estoy debatiendo entre los dos métodos siguientes de implementación de seguridad:¿Qué es mejor, la lista blanca o la seguridad de la lista negra, o ambas?

Lista blanca: De manera predeterminada, los usuarios no tienen acceso a nada y se les concede acceso a las cosas que necesitan.

o

Lista Negro: Por defecto los usuarios tienen acceso a todo y su acceso se retira de las cosas que no necesitan.

¿Existe alguna mejor práctica sobre qué método se prefiere? Si hay otro método que podría abordar mejor este problema, sería interesante saberlo también.

Gracias.

Respuesta

21

Desde el clásico artículo "The Protection of Information in Computer Systems" (Saltzer & Schroeder 1975), que describe ocho principios importantes de diseño, uno de los cuales es: por defecto

a prueba de fallos: acceso a la Base decisiones sobre la autorización en lugar de exclusión. Este principio, sugerido por E. Glaser en 1965,8 significa que la situación por defecto es la falta de acceso, y el esquema de protección identifica condiciones bajo las cuales se permite el acceso . La alternativa, en la cual los mecanismos intentan identificar condiciones bajo las cuales se debe denegar el acceso , presenta una base psicológica equivocada para el diseño del sistema seguro . Un diseño conservador debe ser en función de los argumentos por los que se debe tener acceso a los objetos , en lugar de por qué no deberían serlo. En un sistema grande, algunos objetos se considerarán inadecuadamente , por lo que un defecto de falta de permiso es más seguro. Un error de implementación de diseño o en un mecanismo que otorga permiso explícito tiende a al rechazar el permiso, una situación segura, ya que se detectará rápidamente .Por otro lado, un diseño o un error de implementación en un mecanismo que excluye explícitamente el acceso tiende a fallar al permitir el acceso , una falla que puede pasar a desapercibida durante el uso normal. Este principio se aplica tanto al aspecto exterior del mecanismo de protección como a su implementación subyacente.

11

Lista blanca. Con la lista negra, debe tener en cuenta todas las entradas que PUEDEN ser inválidas. Con la lista blanca, simplemente considere lo que es válido.

3

La seguridad siempre se basa en lo que usted llama "lista blanca". Líbranos de todo y solo abre lo que necesitan.

0

La vista pesimista dice whitelist, la vista optimista diría blacklist. En línea, tengo la seguridad en mayor consideración, así que realmente si se requiere una lista blanca/lista negra, definitivamente vaya con una lista blanca.

1

En el escenario de una aplicación web, siempre usaría una lista blanca. En general, es mejor dar al usuario muy poca potencia que demasiado.

1

Siempre trabaje con una lista blanca, de esa manera, incluso si ha omitido algo, no está siendo vulnerable.

5

Imaginemos que tiene un conjunto de mil llaves de puerta a las que necesita dar acceso a alguien.

¿Prefieres ir a través de todas las llaves y tratar de sacar las que esta persona no necesita y darles el resto? ¿O prefieres darles las llaves que realmente necesitan y negarles el resto?

¿Cuál es el mayor riesgo de error?

2

No sabe lo que no sabe.

Hay muchas formas de evitar la validación del usuario (usando UTF-8 u otra codificación, etc.) y más de una forma de realizar ataques de scripts entre sitios. ¿Estás seguro de que puedes obtener la lista negra que cubre todos los posibles ataques? Esta lista podría ser infinita.

Sin embargo, hacer la lista de lo que es bueno es mucho más fácil y, por consiguiente, mucho más seguro.

Cuestiones relacionadas