El contexto es una API expresa de nodo, estoy usando xss-clean en mi archivo server.js principal:
const xss = require('xss-clean'); // Prevent XSS attacks app.use(xss());Problema: quiero guardar el texto enriquecido, pero se destruye durante el saneamiento.
Quiero mantener esta funcionalidad globalmente, sin embargo, me impide guardar texto enriquecido a través de editores de texto enriquecido en el front-end (es decir, tiptap-vue). El texto guardado con el editor contiene marcado html, que se escapa cuando se guarda en la base de datos, y cuando se vuelve a enviar al front-end a través de una solicitud de obtención, el texto se lee con los escapes y el marcado del elemento.
¿Hay alguna forma de evitar que este componente global funcione en una solicitud específica o en datos específicos dentro de una solicitud?
¿O hay alguna forma de desactivarlo para usarlo en la parte delantera?
Simplemente podría modificar el middleware desde su propia carpeta node_modules, y en el archivo de código fuente donde comienza a analizar el objeto de solicitud, podría agregar una lógica condicional que verifique si el objeto de solicitud cumple con las condiciones que está verificando, si es una solicitud específica o contiene los datos específicos dentro de la solicitud, y luego decide si usa o no la función de saneamiento en el objeto de la solicitud.
[Sin modificar] xss-clean/src/index.js:
import { clean } from './xss' /** * export middleware * @return {function} Middleware function */ module.exports = function () { return (req, res, next) => { if (req.body) req.body = clean(req.body) if (req.query) req.query = clean(req.query) if (req.params) req.params = clean(req.params) next() } }A
import { clean } from './xss' /** * export middleware * @return {function} Middleware function */ module.exports = function () { return (req, res, next) => { if (req.url === "your route path") { //don't use clean() on request object OR you can store only the data you want //in a temp variable to avoid getting sanitized, then sanitize the request //object with clean(), and then replace that sanitized data with the data //in the temp variable OR as a new property in the req object const dataPoint = req.body.something.dataPoint; req.body = clean(req.body); req.body.something.dataPoint = dataPoint; return next(); } if (req.body) req.body = clean(req.body) if (req.query) req.query = clean(req.query) if (req.params) req.params = clean(req.params) next() } }Esto es un poco hacky, pero hace el trabajo. Es peligroso no desinfectar a menos que esté seguro de que no será un problema. También podría simplemente no usar este middleware globalmente en su aplicación, y usarlo solo en las rutas que desea que este middleware desinfecte.