Usar htmlentities () en un área de texto compatible con BBCode para detener XSS

1

Quiero tener un área de texto para publicar cosas en la base de datos con BBCode. Por lo tanto, descargué un código JavaScript (para escribir en el BBCode específico cuando se hace clic en la imagen) pero no transformó el texto.

Hay imágenes de letras sobre el área de texto como B, I y U. Cuando hago clic en una de ellas, quizás en B, el JavaScript inserta [b][/b] al área de texto. Pero cuando envío el texto con otro texto en el BBcode en negrita, no lo hace en negrita.

Entonces, pensé que esto funcionaría:

str_replace('[', '<', $_POST['text']);    
str_replace(']', '>', $_POST['text']);

Funcionó, pero no puedo agregar htmlentities() ahora que he estado usando para prevenir XSS. Entonces, ¿qué otras opciones tengo para detener XSS?

    
pregunta Slim Shady 19.06.2016 - 11:06
fuente

1 respuesta

4

Analizar BBCode de una manera segura que no abra las puertas al infierno XSS es una tarea difícil, y ha habido muchos intentos fallidos. Como usted mismo señala, la forma en que lo hace actualmente es vulnerable a XSS; todo lo que necesita hacer es publicar [script src="evil.js"] . El solo uso de htmlentities() no resolverá esto por usted, es mucho más complejo. Este blog ilustra el problema claramente.

Por lo tanto, no recomendaría que intente implementar su propio intérprete BBCode. En cambio, me gustaría ver las bibliotecas existentes, ya sea en PHP o en el lado del cliente en JavaScript y evaluar su registro de seguridad. Algunos lugares para comenzar:

Para agregar una capa de seguridad adicional, puede ejecutar el HTML generado a través de un desinfectante HTML diseñado para "sandbox" HTML y mantener las etiquetas o atributos no deseados (como script o onerror ) en caso de que la biblioteca BBCode debería desaprobarte. Algunos ejemplos:

Tenga en cuenta que no he evaluado la seguridad de estas bibliotecas. Quizás haya mejores alternativas, estas se proporcionan aquí como ejemplos. Independientemente de la biblioteca que elija, deberá consultar su historial y decidir si confía en él o no. Y como de costumbre, asegúrese de mantener las bibliotecas actualizadas.

Como SilverlightFox dice en los comentarios, como tercera capa de defensa (para los navegadores que lo admiten) puede configurar una política de seguridad de contenido que no permite los scripts en línea.

    
respondido por el Anders 19.06.2016 - 11:58
fuente

Lea otras preguntas en las etiquetas