Isomorphic Dompurify.sanitize() 丢失请求体,如何保留请求体内容?
解决isomorphic-dompurify过滤请求体的问题
isomorphic-dompurify本质是为清理HTML/XML类危险内容设计的,它的sanitize()方法并不适合直接传入完整的请求对象——当你把包含请求头、请求体的复杂JS对象丢进去时,它会按照DOM节点规则解析过滤,自然会丢弃掉它认为非“安全DOM结构”的请求体内容。
要保留请求体,正确的做法是拆分处理请求中的用户输入部分,而非把整个请求对象塞进sanitize():
- 只对请求头、请求体中来自用户的字符串内容单独调用
sanitize(),不要处理整个对象。 - 如果请求体是JSON结构,遍历其中每个字符串字段,对字段值做sanitize后再重组对象;如果是表单格式,逐个处理表单字段。
举个Node.js环境的示例:
const DOMPurify = require('isomorphic-dompurify'); // 假设这是你的请求对象 const request = { headers: { 'user-agent': '<script>alert("xss")</script>' }, body: { username: '<b>test</b>', content: '<img src=x onerror=alert(1)>' } }; // 正确处理方式:单独清理每个用户输入字段 const sanitizedRequest = { headers: { ...request.headers, 'user-agent': DOMPurify.sanitize(request.headers['user-agent']) }, body: { username: DOMPurify.sanitize(request.body.username), content: DOMPurify.sanitize(request.body.content) } };
这样既完成了危险内容的清理,又能完整保留请求头和请求体的结构与内容。
内容的提问来源于stack exchange,提问作者mik32
相关产品推荐
相关产品推荐

