sql防注入

之前就是一直在学这个概念,知道用占位符?就不会产生sql注入,而且在java和node中也一直再用占位符

工作之后真的没有考虑过sql注入的问题。。。。。。

工作之后也没有考虑过索引的问题。。。。。。

 

简单来说,一些之前为了应付面试的基础知识,在实际使用的时候都不会考虑。。。。

然而现在同事提醒我了,同事工作经验多,考虑的周全,向人家学习鸭!

 

先说下怎么才能防止sql注入吧?为什么使用占位符就可以防止sql注入?

因为占位符这个sql语句在数据库已经预编译好了,因此说这个sql已经是确定的了,唯一不确定的就是参数,

1.数据库建表时,考虑多条件查询的字段需要建立索引

2.多条件查询时,会出现sql语句拼接,拼接的时候就要考虑sql注入

由于拼接的时候需要拼接的字符串就可以通过修改字符串进而修改sql语句了,就会产生sql注入问题。。。

那么拼接的这种如何防止sql注入呢,由于拼接的sql不是预编译的,

node.js用escape()来防止-sql注入

================================================================================================

直接拼写sql进行数据库的操作时,很容易被人在动态参数中加入特殊字符产生sql注入,威胁数据库的安全。

'use strict';

const mysql = require('mysql');

let param = 'ns';
let pool = mysql.createPool({
  user: 'root',
  password: 'root',
  database: 'nlp_dict'
});

pool.getConnection(function (err, conn) {
  let sql = 'select * from tb_nature where nature = "' + param + '" and del_status=1';
  conn.query(sql, function (err, result) {
    console.log(result);
  })
});

这时正常情况下能查询到一条数据,如果将param修改成
let param = 'ns"-- ';
sql语句就会变成
select * from tb_nature where nature = "ns"-- " and del_status=1
后面的del_status就会被参数中的 -- 注释掉,失去作用,能查询到多条数据。

如果对param使用escape包装下,就能将参数中的特殊字符进行转义,防止sql的注入。
let sql = 'select * from tb_nature where nature = ' + mysql.escape(param) + ' and del_status=1';

================================================================================================

不说了,我要去将所有的sql注入给他改了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值