首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Node.JS防止SQL注入?

如何使用Node.JS防止SQL注入?
EN

Stack Overflow用户
提问于 2017-01-19 20:49:51
回答 1查看 6.8K关注 0票数 3

如何使用Node.JS选择一行MS SQL server数据库并防止SQL注入?我使用express框架和mssql包。

这是我现在使用的代码的一部分,可以使用ES6编写的SQL注入。

代码语言:javascript
复制
const express = require('express'),
      app = express(),
      sql = require('mssql'),
      config = require('./config');

let connect = (f, next) => {
    sql.connect(config.database.connectionstring).then(f).catch((err) => {
        next(err);
    });
};

app.get('/locations/get/:id', (req, res, next) => {
    let f = () => {
        new sql.Request().query(`select * from mytable where id = ${req.params.id}`)
                         .then((recordset) => {
            console.dir(recordset);
        }).catch((err) => {
            next(err);
        });
    };

    connect(f, next);
});

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 21:04:07

使用PreparedStatement。下面是如何在文档https://www.npmjs.com/package/mssql#prepared-statement中执行此操作:

代码语言:javascript
复制
var ps = new sql.PreparedStatement(/* [connection] */);
ps.input('id', sql.Int);
ps.prepare('select * from mytable where id = @id', function(err) {
  ps.execute({id: req.params.id}, function(err, recordset) {
    ps.unprepare(function(err) {
        // ... error checks 
    });

    // Handle the recordset
  });
});

请记住,每个预准备语句意味着池中的一个保留连接。不要忘记取消准备一条准备好的语句!

您还可以在事务中创建预准备语句(新的事务(sql.PreparedStatement)),但请记住,在调用unprepare之前,您不能在事务中执行其他请求。

文档是用ES5编写的,但我相信你可以简化它:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41742200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档