【问题标题】:How do I know my input is being sanitized by express-validator?我怎么知道我的输入正在被 express-validator 清理?
【发布时间】:2018-08-21 12:43:06
【问题描述】:

我已经实现了express-validator,并且正在尝试清理用户正在搜索特定查询的输入字段。

我使用的测试查询是<script>Malicious code</script。当请求进来时,我使用:

req.sanitizeQuery('searchQuery');

当我随后检查查询是否已被清理时,字符串尚未以任何方式被更改/清理。

我可能从根本上误解了这里的消毒,在这种情况下,请指出。如果我是,那么我可以去填补我的知识空白,但与此同时,我可以向我的消毒剂抛出什么“测试”查询以检查它是否有效?

【问题讨论】:

    标签: javascript node.js express sanitization express-validator


    【解决方案1】:

    查看文档,express-validator 旨在用作中间件。

    所以我想说你想要一些看起来有点像这样的代码:

    const { validationResult } = require('express-validator/check');
    const { sanitizeQuery } = require('express-validator/filter');
    
    // Setup the request handler, give it some validation middleware
    // then the main request handler
    app.get('/search', [sanitizeQuery('searchQuery').escape()], function(req, res, next) {
      // Deal with any errors
      const errors = validationResult(req);
      if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.mapped() });
      }
    
      // req.query.searchQuery was sanitised via the middleware, it should now
      // be clean.
      console.log(req.query.searchQuery);
    });
    

    我们使用 sanitizeQuery 函数作为中间件,它将清理值 req.query.searchQuery。我假设因为它是一个清理功能,它不会触发来自validationResult的任何错误,而是会为您返回一个干净的响应。

    然后您应该能够在您的{{host}}/search?searchQuery= <script>Malicious code</script> 请求您的服务,其中{{host}} 是您的服务主机,例如http://localhost:8080

    【讨论】:

    • sanitizeQuery('searchQuery') 实际上并没有清理任何东西......查询保持不变。你必须sanitizeQuery('searchQuery').escape() 才能真正进行消毒,对吧?
    • sanitizeQuery 返回一个清理链,然后您可以按照您的说明将其链接到该链上。但是函数escape() 没有出现在我上面链接的文档中,我只能假设escape 函数不存在,您必须使用customSanitizer 来创建自定义消毒剂以满足您的需求。
    • 啊,正如你所说,escape 是有效的,它显示在用于消毒剂的 validator.js 文档中 - github.com/chriso/validator.js 所以是的,我相信这将是正确的语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多