防止sql注入
sql注入大大降低了网站的安全性!最终达到欺骗服务器执行恶意的SQL命令。 会查出条件不允许的数据,
假如是这样的一条sql:
$sql="select *from stu where stu_name = $nameand stu_email = $password";
那么危险来了,注入sql后会变成这样:
select * from t_admin where stu_name ='xxx' and stu_email ='xxx'' or '1';
那我们常见的sql注入还如何解决呢
1.添加图形码进行验证
添加图形码在一定程序上增加代码的安全性,给机器强制破解有一定的拦截作用,但不能阻止所有的攻击,
故还是需要在程序上进行安全性考虑
2.使用预备义语句和参数化查询
使用预处理语句和参数化查询。预处理语句和参数分别发送到数据库服务器进行解析,参数将会被当作普通字符
处理。这种方式使得攻击者无法注入恶意的SQL。常用的方式有两种
预备义语句(使用PDO中的预处理)
不同sql的注入的威胁到我们的网站,那么怎么解决呢,针对上面的一条sql来说:
$sql="select *from stu where stu_name = ? and stu_email = ?"; //预处理(prepare) $stmt = $db->prepare($sql);//生成一个“查询对象” $exeres=$stmt->execute(array($name,$password));//执行
我们用‘?’字符串将sql替代,形成一个预处理的数据。
参数化查询(使用mysqli)
$stmt = $dbConnection->prepare('SELECT * FROM t_admin WHERE admin_name = ?');
$stmt->bind_param('s', $name);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}
希望可以帮助到各位呦!
相关阅读
前言 写完一个借口,测试时,总是提示SQL语句有问题,不可能吧,我是直接用的mybatis自动生成的,不应该啊,找了半天,原来是因为数据库中将关
目录 1、给普通字段注入值 2、通过构造方法给参数赋值以及调用指定的构造方法 3、给对象类型的属性注入值 4、给list集合注
触发器的概念触发器是一种特殊的存储过程,它被分配给某个特定的表。当对这个表进行插入、更新或删除操作时,自动调用触发器执行触发
提到空间数据库,首先想到的一定是Esri公司的ArcSDE(SDE即Spatial Database Engine,空间数据库引擎),ArcSDE主要支持的数据库包括Oracle
栗子一: IF 1=1BEGINDECLARE @test VARCHARSET @test='1' PRINT 'in if:'+@testEND 运行看结果输出in if:1这是可以预