Pregunta

Salida o el filtrado de entrada?

Me constantemente ver a la gente a escribir "filtro que las entradas", "desinfectar sus entradas", hacer los datos del usuario no sean de confianza, pero sólo de acuerdo con la última, donde considero que confiar en los datos externos una mala idea, incluso si se trata de relativa interna al sistema.

Los filtros de entrada: El más común que veo. Tome los datos del formulario de correos o cualquier otra fuente externa de información y definir algunos límites al guardarlo, por ejemplo, asegurándose de que el texto es el texto, los números son los números, que SQL es SQL válida, que HTML es HTML válido y que no contiene nocivas marcado, y luego guardar los datos de "seguros" en la base de datos.

Sin embargo, al obtener los datos que acaba de utilizar los datos en bruto de la base de datos.

En mi opinión personal, los datos nunca es realmente seguro. Aunque suena fácil, filtro todo lo que se obtiene de las formas y los URL, en realidad es mucho más difícil que eso, puede ser que sea seguro para un idioma, pero no en otro.

Salida de filtrado: Al hacerlo de esta manera puedo guardar los datos inalterados primas, sea lo que sea, con comandos preparados en la base de datos y luego filtrar el código problemático cuando se accede a los datos, esto tiene su propio ventajas: Esto añade una capa entre html y la secuencia de comandos del lado del servidor. que considero ser datos de acceso separación de clases.

Ahora datos se filtran en función del contexto, por ejemplo, puedo tener los datos de la base de datos se presenta en un documento HTML tan claro-escapado de texto, o como HTML o como cualquier cosa.

Los inconvenientes son que aquí no hay que olvidar a añadir el filtrado que es un poco más difícil que con filtrado de entrada y utiliza un poco más de la CPU cuando el suministro de datos.

Esto no quiere decir que usted no tiene que hacer comprobaciones de validación, todavía lo hace, es sólo que no lo hace guardar los datos filtrados, validar y proporcionar al usuario un mensaje de error si los datos son de alguna manera no válido.

Así que en lugar de ir con "filtrar las entradas" tal vez debería ser "validar sus entradas, filtrar sus salidas".

así que debería ir con "Validación de entrada y filtrar" o "Validación de entrada y salida de la filtración"?

¿Fue útil?

Solución

No hay genérico "filtrar" para entrada y salida.

Validar la entrada, la salida de escape. La forma de hacerlo depende del contexto.

La validación se trata de asegurarse de entrada cae dentro de rangos razonables, al igual que la longitud de las cadenas, la numericality de las cantidades en dólares o que un registro que se actualiza es propiedad del usuario que realiza la actualización. Esto se trata de mantener la coherencia lógica de los datos y evitar que la gente haciendo cosas como poner a cero el precio de un producto que están comprando o eliminar registros que no deberían tener acceso. No tiene nada que ver con "filtrar" o escapar caracteres específicos en su entrada.

Escapar es una cuestión de contexto, y en realidad sólo tiene sentido cuando se está haciendo algo con los datos que pueden ser envenenados mediante la inyección de ciertos caracteres. Escapar caracteres HTML en los datos que envía al navegador. Caracteres de escape SQL en datos que envía a la base de datos. Escapar comillas cuando se está escribiendo los datos dentro de las etiquetas <script> JavaScript. Sólo ser conscientes de cómo los datos se está tratando es que va a ser interpretado por el sistema que está pasando a escapar y en consecuencia.

Otros consejos

La mejor solución es la de filtrar tanto. Haciendo sólo uno hace que sea más probable que se pierda un caso, y puede dejar que abra a otros tipos de ataques.

Si vas a hacer el filtrado de entrada, un atacante podría encontrar una manera de evitar las entradas, y causa una vulnerabilidad. Esto podría ser alguien con acceso a su base de datos la introducción de datos de forma manual, podría ser un atacante la posibilidad de subir un archivo a través de FTP o algún otro canal que no está marcada, o muchos otros métodos.

Si sólo haces filtrado de salida, puede dejarse abierto a la inyección de SQL y otros ataques del lado del servidor.

El mejor método es el de filtrar tanto sus entradas y salidas. Puede causar más carga, pero reduce considerablemente el riesgo de que un atacante encontrar una vulnerabilidad.

Sonidos como la semántica para mí. De cualquier manera, lo importante para recordar es asegurarse de que los malos datos no se interpone en el sistema.

Hacer salida de filtrado en lugar de filtrado de entrada está pidiendo una inyección SQL.

text alt

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top