【问题标题】:Sanitizing input fields in express app清理快速应用程序中的输入字段
【发布时间】:2018-01-12 18:37:41
【问题描述】:

我的网站上有几个电子邮件输入字段。对于这些,我有 1 个 POST 路由:

app.post('/', function(req, res){
    Email.create(req.body.email, function(err, newEmail){
        if(err){
            console.log(err);
        } else {
            res.redirect('/');
        };
    });
});

我从中学习的训练营告诉我,不法分子可以在这些输入中使用脚本。但是,当我尝试这样的事情时:

<script>alert('test')</script>

什么都没有发生。事实上,它只是被添加到我的 mongo 数据库中。

我还是按照训练营的建议安装了 express-sanitizer 并这样做了:

app.post('/', function(req, res){
    req.body.email = req.sanitize(req.body.email);
    Email.create(req.body.email, function(err, newEmail){
        if(err){
            console.log(err);
        } else {
            res.redirect('/');
        };
    });
});

但是,当我这样做并输入一些内容时,当我输入任何字符串或脚本时,我会收到一条错误消息,指出“ObjectParameterError”。

我的 app.use 看起来像这样:

app.use(bodyParser.urlencoded({extended: true}));
app.use(expressSanitizer());

关于如何最好地保护自己免受脚本以及如何正确实施 express-sanitizer 的任何建议?

【问题讨论】:

    标签: mongodb express post


    【解决方案1】:

    这可能是您如何更改值的问题。

    我已经这样做了,它有效:

    const expressSanitizer = require('express-sanitizer')
    let bodyParser = require('body-parser')
    
    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({ extended: true}))
    //For Sanitising SQL
    app.use(expressSanitizer())
    
    

    然后当我想消毒时:

    //Pulling the sanitised values from request body
    var name = req.sanitize(req.body.name)
    var email = req.sanitize(req.body.email)
    

    【讨论】:

      【解决方案2】:

      尝试只对需要的对象进行消毒,而不是对整个对象进行消毒。

      req.body.email = req.sanitize(req.body.email) 应该是这样的req.body.email.yoursanitizationfield = req.sanitize(req.body.email.yoursanitizationfield);

          req.body.email.yoursanitizationfield = req.sanitize(req.body.email.yoursanitizationfield);
          Email.create(req.body.email, function(err, newEmail){
              if(err){
                  console.log(err);
              } else {
                  res.redirect('/');
              };
          });
      });```
      
      
      
      

      【讨论】:

        【解决方案3】:

        我能否建议添加一些调试以深入了解程序执行情况。在req.body.email = req.sanitize(req.body.email); 之后添加console.log(req.body.email); 看看是否有效? (或者实际上,如果执行甚至达到了这一点。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多