node mysql 防注入_nodejs sequelize库防注入测试

介绍

在nodejs中使用sequlize库来查询mysql数据库, 提供了常用的方法有两种:

直接查询sql语句: sequelize.query();

通过接口,如Project.findAll();

sequelize的第2种查询方法在实现上做了防注入处理, 但该方法使用并不是很灵活, 对于经常使用原生sql语句的人来说, 总有一种不适应, 感觉手脚被束缚; 而对于使用方法1, 则必须注意防sql注入;

这里我测试前面提到的两种查询方式如何做到初步的防sql注入功能;

sql注入

产生原因

下面的查询语句, 加入了用户输入的时间项: begin, end, 正常情况是:

begin = 20161101;

SELECT .. FROM tbl WHERE pdate>=20161101 AND ...;

而如果有人故意输入如下的参数, 则就会出现sql注入:

begin = '20161101 AND 1=1; -- hack';

SELECT .. FROM tbl WHERE pdate>=20161101 AND 1=1; -- hack ...;

解决办法

解决上面的办法, 通常有两种:

1. 对输入的参数进行转义, 因为sql注入通常需要'符号来闭合前面的', 这样如果位面在输入的参数中的'全部转义为\', 则查询时就不会出现中断(执行两条sql语句), 参看下面的例子;

2. 设置mysql只能一次执行一条sql语句;

测试

sequelize.query()与Project.findAll()对比

先看代码

var tblName = 'tbl_test', begin 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值