本来想把这篇文章写在 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]

那就进入了界面 

那么前台做特殊字符的防御 也可以达到防止的目的 但是 高人也会有高人的手段 就看他想不想~

还有很多进攻手段

https://blog.51cto.com/13444271/2126594(老君) 看一下这篇文章

nodejs占位符 转义查询
防止SQL注入  使用占位符 也是很好的选择

那么为什么 占位符可以防止 SQL注入那

简单的说 使用占位符 在mysql 传入的就是被转义后的sql

被数据库厂商方便的解决了

 
select * from 表 where username= admin\' or '\1\ and password=admin\' or '\1\

详细可以看这篇

https://www.cnblogs.com/greatfish/p/6067849.html

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

 

学完还想练练?点这里