Pregunta

Actualmente tengo un sistema de validación del lado del servidor bastante robusto, pero estoy buscando algunos comentarios para asegurarme de haber cubierto todos los ángulos. Aquí hay un breve resumen de lo que estoy haciendo en este momento:

  • Asegúrese de que la entrada no esté vacía o sea demasiado larga

  • Escapar cadenas de consulta para evitar la inyección de SQL

  • Uso de expresiones regulares para rechazar caracteres no válidos (esto depende de lo que se envíe)

  • Codificación de ciertas etiquetas html, como < script > (todas las etiquetas se codifican cuando se almacenan en una base de datos, y algunas se decodifican cuando se consulta para representar en la página)

¿Hay algo que me falta? Se aceptan ejemplos de código o expresiones regulares.

¿Fue útil?

Solución

No debería necesitar " Escape " cadenas de consulta para evitar la inyección de SQL: en su lugar, debería usar declaraciones preparadas.

Idealmente, su filtrado de entrada ocurrirá antes que cualquier otro procesamiento, para que sepa que siempre se usará. Porque de lo contrario solo necesita perderse un lugar para ser vulnerable a un problema.

No olvides codificar entidades HTML en la salida para evitar ataques XSS.

Otros consejos

Debe codificar cada etiqueta html, no solo las 'inválidas'. Este es un debate candente, pero básicamente se reduce a que siempre habrá alguna combinación HTML no válida que olvidará manejar correctamente (etiquetas anidadas, etiquetas no coincidentes que algunos navegadores interpretan 'correctamente' y así sucesivamente). Entonces, la opción más segura en mi opinión es almacenar todo como htmlentities y luego, en la salida, imprimir un árbol de subconjunto seguro de HTML validado (como entidades) desde el contenido.

Ejecute toda la validación del lado del servidor en una biblioteca dedicada a la tarea para que las mejoras en un área afecten a toda su aplicación.

Además, incluye el trabajo contra ataques conocidos, como el recorrido del directorio y los intentos de acceder al shell.

Esta pregunta / respuesta tiene algunas buenas respuestas que estás buscando
( orientado a PHP, pero nuevamente no especificó el idioma / plataforma y parte de esto se aplica más allá del mundo php ):

  

¿Cuál es el mejor método para desinfectar la entrada del usuario con PHP?

Puede consultar la Filter Extension para el filtrado de datos. No garantizará que seas completamente hermético, pero personalmente me siento mucho mejor al usarlo porque ese código tiene muchos ojos mirando por encima.

Además, considere las declaraciones preparadas secundadas. Escapar de datos en sus consultas SQL es cosa del pasado.

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