Sé que puedo utilizar el método de ayuda ActionView strip_tags
en mis puntos de vista para desinfectar la salida, pero ¿cuál es la mejor manera de desinfectar la entrada del usuario antes de que yo persisto a mi db? ¿Debería encontrar una manera de incluir el asistente de visualización en mi controlador y volver a utilizar el método strip_tags? Pensé que los rieles tendrían algo disponible globalmente para hacer algo como esto.Esterilice XSS de entrada y de entrada HTML en los carriles
Respuesta
¿Qué pasa con el complemento xss_terminate?
¿Por qué necesita desinfectar la entrada del usuario?
Normalmente, todo lo que se necesita es una codificación/escape riguroso y sensible al contexto de la entrada del usuario siempre que lo imprima o lo incruste en un bloque de salida mayor.
No tiene sentido dejar el código malicioso solo sentado en su base de datos. Múltiples vectores de ataque en aplicaciones web ya son un lugar común y esto simplemente parece una cosa fácil de arreglar, IMO. Defensa en profundidad, ¿sabes? – phreakre
Rails 3 toma el enfoque correcto. Automáticamente se escapa html de todo (incluidos los datos ingresados por el usuario) que se envía al html, excepto aquellos elementos específicos que el programador indica que ya son html-safe. Rails 3 hace defensa en profundidad, y lo hace de la manera correcta y rigurosa, con datos que se escapan en el lugar correcto y en el momento correcto. – yfeldblum
quizá desinfecte joya: http://wonko.com/post/sanitize
¿Por qué quieres para desinfectar las entradas de usuario? ¡Eso ni siquiera tiene sentido! Siempre desea desinfectar (escapar) las salidas, no las entradas, porque el significado de sanitización depende del contexto en el que está usando el contenido. No existe una cadena segura en ningún contexto. No quiere un montón de cadenas alteradas en su base de datos que son "seguras" en cualquier escenario en el que su aplicación las esté utilizando hoy, porque mañana, quizás quiera hacer algo diferente con ellas. Si su capa de presentación está haciendo lo correcto (escapando contenido según el contexto), entonces está bien, no importa cuántas comillas, barras diagonales inversas o declaraciones DROP TABLE contengan.
En algunos casos, tiene sentido "desinfectar" la entrada del usuario antes de almacenarla en la base de datos. Por ejemplo, si un usuario ingresa su apellido como "
Smith
", no tiene sentido almacenar la etiqueta html en la base de datos. En este caso, es bueno quitar la etiqueta html antes de guardar el apellido en la base de datos. –La pregunta original relacionada con la inyección (XSS y HTML), en cuyo caso sostengo que la desinfección es * siempre * worng. Pero incluso si de alguna manera tiene basura en la cadena, ¿cuáles son sus posibilidades de que la desinfección encuentre la basura? Es difícil para un algoritmo averiguar qué parte es y no es un nombre. Por ejemplo, ¿cuándo es parte de un sello y una entidad HTML, y cuándo es parte de un nombre como "Smith & Wesson"? Muy pronto, terminas con esto: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Enno
- 1. ¿Cómo puedo validar la entrada HTML para evitar XSS?
- 2. matrices de entrada HTML
- 3. de entrada es URL, cómo protegerlo de xss
- 4. Cuadro de entrada HTML - Deshabilitar
- 5. Entrada HTML onfocus & onblur?
- 6. Backbone.js y XSS/HTML escapándose
- 7. Cómo modificar el mismo ancho de entrada de texto HTML y desplegable de entrada
- 8. HTML 5 ID de entrada de diferencia y nombre de entrada?
- 9. Entrada Nest dentro de f.label (generación de formulario carriles)
- 10. Agregar mensajes de entrada a los campos de formulario HTML
- 11. Determine la codificación de entrada examinando los bytes de entrada
- 12. entrada de texto html Evento de cambio
- 13. jQuery: Obtenga HTML así como los valores de entrada
- 14. Nombres estándar para los campos de entrada HTML
- 15. ¿Qué hace que una entrada sea vulnerable a XSS?
- 16. HTML/PHP - valor de entrada por defecto
- 17. valor Obtención de entrada de texto HTML
- 18. HTML-Entidad de escape para evitar XSS
- 19. campo de entrada html FUERA del formulario
- 20. entrada html imagen de fondo con
- 21. Entrada de archivos y Dart
- 22. HTML codificación en la entrada MVC
- 23. Desinfección de entrada de usuario utilizando Python
- 24. Ocultar borde en HTML Formulario o Entrada
- 25. piñones - ¿puntos de entrada múltiples?
- 26. Entrada repetida de entrada a una entrada estándar del proceso
- 27. Cuadro de texto de entrada HTML en Django admin.py filtro
- 28. Fundido de entrada y movimiento
- 29. HTML/CSS de entrada/área de texto, texto por defecto, y los colores
- 30. jQuery Entrada enmascarada - Valor de entrada existente
2 años después y dos votos a la baja sin comentarios: los comentarios al menos ayudarían a que los demás usuarios tuvieran una idea más clara. Nota: en el momento de la respuesta estábamos usando Rails 2 y ¡las cosas no eran tan buenas como lo son ahora! –