Javascript 从NodeJS中的POST对象创建数组的替代方法

Javascript 从NodeJS中的POST对象创建数组的替代方法,javascript,arrays,node.js,express,Javascript,Arrays,Node.js,Express,我正在尝试重构它,特别是记录数组 app.post('/insert', function(req,res){ var record = { operator: req.body.operator, email: req.body.email, telephone: req.body.telephone, notes: req.body.notes }; dbconn.query('INSERT INTO op

我正在尝试重构它,特别是记录数组

app.post('/insert', function(req,res){

   var record = {
       operator: req.body.operator,
       email: req.body.email,
       telephone: req.body.telephone,
       notes: req.body.notes
       };

   dbconn.query('INSERT INTO operators SET ? ', record, function(err,result){
       if(err) {
         console.log(err);
       }
       else {
        console.log('Last record insert :' + req.body.operator);
        res.redirect('/myrecords');
       }
   });
});
到以下工作正常的部分

app.post('/insert', function(req,res){

  var record = req.body;  // <- Refactored

  dbconn.query('INSERT INTO operators SET ? ', record, function(err,result){
     if(err) {
        console.log(err);
     }
     else {
        console.log('Last record insert :' + req.body.operator);
        res.redirect('/myrecords');
     }
   });
});
app.post('/insert',函数(req,res){

var record=req.body;//一个问题是您没有“允许”的白名单要在operators表上设置的列。在第一个示例中,代码确保在要插入的新行上只设置operator、email、telephone和notes列。在第二个示例中,用户添加到POST请求正文中的任何字段都会在要插入的新行上设置同名列。这可以,但我如果您不希望用户在operators表中设置任何列,则第二种方法是不安全的。

一个问题是您没有“允许”的白名单要在operators表上设置的列。在第一个示例中,代码确保在要插入的新行上只设置operator、email、telephone和notes列。在第二个示例中,用户添加到POST请求正文中的任何字段都会在要插入的新行上设置同名列。这可以,但我如果您不希望用户能够在operators表中设置任何列,则第二种方法是不安全的。

第二种方法可能存在安全问题,因为可能通过劫持post数据对象将不需要的值插入数据库


例如,如果有人在post对象中添加了
operator\u id
,而您在
operator
表中有字段
operator\u id
,那么您的
operator\u id
值将被插入一个不需要的值。

第二种方法可能会有安全问题,因为它可能会在post对象中插入不需要的值通过劫持post数据对象来访问数据库


例如,如果有人将
operator\u id
添加到post对象中,而您在
operator
表中有字段
operator\u id
,那么您的
operator\u id
值将被插入一个不需要的值。

谢谢,这一点很清楚。既然html表单中有特定的字段可以填充,那么用户可以如何“注入”一个我们不希望在POST对象中得到的值,比如operator.id,我希望它只由MySQL DB生成。HTML表单在客户端呈现(在用户的浏览器中)。用户不需要遵守表单的规则,可以向表单中添加输入元素,以便将其发送到帖子正文中,甚至可以一起绕过表单,只需使用他们编写的一些代码中的HTTP帖子直接调用API。谢谢,这一点很清楚。既然html表单具有可以填充的特定字段,那么用户如何能够“注入“一个我们不希望在POST对象中获得的值,比如operator.id,我希望它只由MySQL DB生成。HTML表单在客户端呈现(在用户的浏览器中)。用户不需要遵守表单的规则,可以向表单中添加输入元素,以便将它们发送到POST正文中,甚至可以一起绕过表单,直接使用HTTP POST从他们编写的一些代码中调用API。即使在第一个示例中(重构之前),我也通过添加“id”来进行SQL注入“表单字段和修改与客户端ajax请求中的对象数组相同。如何避免这种情况?在第一个示例中,您仅从body对象中提取四个值[操作员、电子邮件、电话、备注],我认为您不能向sql语句中注入ID值。也许您应该使用示例代码创建一个新问题,这样我就可以帮助您解决sql注入问题。即使在第一个示例中(重构之前),我也通过添加“ID”来进行sql注入表单字段,并在客户端ajax请求中修改相同的对象数组。如何避免这种情况?在第一个示例中,您仅从body对象中提取四个值[操作员、电子邮件、电话、备注],我认为您不能向sql语句中注入ID值。也许您应该使用示例代码创建一个新问题,以便我可以帮助您解决sql注入问题。