【问题标题】:How to sanitize the req.log.error in node js如何清理节点 js 中的 req.log.error
【发布时间】:2021-09-16 20:47:33
【问题描述】:

我正在尝试修复 Checkmarx 扫描工具报告的问题,我尝试在以下路由模块中清理 err 和 req。 但是,它仍然抱怨同样的错误。

index.js

const express = require('express')
const router = express.Router()

const fs = require('fs')
const config = require('config')
var _require = require('jsdom'),
    JSDOM = _require.JSDOM;

var window = new JSDOM('').window;
var DOMPurify = createDOMPurify(window);


function sanitizeError(value){
    return DOMPurify.sanitize(value);

}

function sanitizeObject(obj) {
  var sanitizedObject = {};
  Object.keys(obj).forEach(function (key) {
    sanitizedObject[key] = sanitizeValue(obj[key]);
  });
  return sanitizedObject;
};

//error handler route
router.use('/error',(err, req, res, next) => {

  //sanitizeObject(req)
  req.logger.error('uncaught error page', sanitizeError(err))
  res.redirect('/toanotehrerror page')  
})

module.exports = router

Checkmarx 错误:

Reflected_XSS 错误。它指的是上面模块中的req.logger.error

应用程序的 router.use 在 \routes\index.js 的第 x 行将不受信任的数据嵌入到生成的输出中并出现错误。这些不受信任的数据直接嵌入到输出中,没有经过适当的清理或编码,使攻击者能够将恶意代码注入到输出中。

攻击者可以通过简单地在用户输入错误中提供修改后的数据来更改返回的网页,这些数据由 \routes\index.js 的第 x 行的 router.use 方法读取。然后,此输入通过代码直接流向输出网页,无需进行清理。

这可以启用反射跨站点脚本 (XSS) 攻击。

【问题讨论】:

    标签: javascript node.js checkmarx


    【解决方案1】:

    Checkmarx 在其认可的消毒剂列表中没有 DOMPurify。它所识别的是 ESAPI 库、xss-filters 和 htmlescape 包

    https://www.npmjs.com/package/xss-filters

    https://www.npmjs.com/package/node-esapi

    https://www.npmjs.com/package/htmlescape

    虽然从技术上讲,您的代码可以防止 XSS,但我会使用上述任何包重写它。例如,如果我们要使用 xss-filters

    var xssFilters = require('xss-filters');
    
    function sanitizeError(value){
        return xssFilters.inHTMLData(value);
    
    }
     
    

    【讨论】:

    • 感谢您的回答。看起来 DOMPurify 对某些人有效,而对某些人则无效。
    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多