Nodejs(SQL注入,占位符 转义查询 )
原创
©著作权归作者所有:来自51CTO博客作者朋克版小红帽的原创作品,请联系作者获取转载授权,否则将追究法律责任
浅谈SQL注入
本来想把这篇文章写在 Nodejs(访问mysql)里 但是查了一下SQL注入 引起了我的兴趣 可能学习完前端这一套 我会抽时间 学习网络安全 这种课程
什么是SQL注入 就是 大家写SQL的时候 不管方法也好 还是 直接从界面取得控件内容 都或多或少拼接字符串方式
var name=txt_name.text;
var password=txt_pass.text;
select * from 表 where name = '"+name+"' and pass = '"+password+"' ;
那么 假如 一个人 在登录的时候 输入了 admin' or '1
select * from 表 where username= 'admin' or '1' and password='admin' or '1'
根据SQL中逻辑运算的优先级,or低于and,最后的or ‘1’永远成立,所以该条件表达式结果为True,此语句同等于下面的这条语句
select * from [users]
那就进入了界面
那么前台做特殊字符的防御 也可以达到防止的目的 但是 高人也会有高人的手段 就看他想不想~
还有很多进攻手段
SQL注入其实很简单,别一不留神就被利用了_51CTO博客_sql注入怎么利用(老君) 看一下这篇文章
nodejs占位符 转义查询
防止SQL注入 使用占位符 也是很好的选择
那么为什么 占位符可以防止 SQL注入那
简单的说 使用占位符 在mysql 传入的就是被转义后的sql
被数据库厂商方便的解决了
select * from 表 where username= admin\' or '\1\ and password=admin\' or '\1\
详细可以看这篇
为什么占位符可以防止sql注入? - GreatAnt
nodejs 使用占位符
var mysql = require('mysql');
//连接信息
var connection = mysql.createConnection({
host : 'localhost',
port:3306,
user : 'root',
password : 'root',
database : 'db'
});
//建立连接
connection.connect();
var age = '2'
var id='1'
//执行语句
connection.query('select *from prople where age=? and id=?',[age,id],function(err,results, fields)
{
if (err) {
console.log(err);
}else
{
console.log(results);
console.log(fields);
}
});
connection.end();
占位符是很重要的一个知识点!get get