因为刚学php,但总是看到别人在写php代码时总是写一些提防sql注入的句子,到底啥是sql注入呢?好象一些特殊符号写进数据库中就行了,但我有疑问是,这些特殊符号如\ '等就是写进去了,又能咋样呢?也不会对安全造成威胁


回复讨论(解决方案)

在 php 环境中,其实并不存在 SQL攻击
所谓 SQL攻击 不外是从两个方面进行的:
1、通过某种手段,将被执行的 sql 指令拆分成多条指令,从而将 update、delete 指令嵌入进去。以对数据库造成致命威胁
php 提供的数据库函数都只允许一次执行一条指令(mysqi 有一条例外),于是这方面的威胁就不存在了
2、通过某种手段,将被执行的查询指令从有条件查询变成无条件查询,从而获取“机密”资料
在 php 中,查询结果必须通过程序代码才能展示,所以攻击者实际并看不到更多的数据

SQL攻击 起源于 sql server 2000 的一款 HTML 服务:在浏览器地址栏输入 sql 指令,就可操作数据库。并将结果一html页面的形式展示出来
这本是是一项很可人的服务,但是被坏人钻了空子,就是所谓的 SQL攻击
于是目前这款服务被加上了严密的用户认证。并且引起所有的数据库系统都限制了远程访问,使得数据库的应用大打折扣

我是说,这些特殊字符放到数据库中能有啥危害呢

没有多少特殊字符
对数据库而言就只有一个:'(单引号)

简单举个例子

例如要检查用户登入输入的用户名和密码是否正确。

$username = 'fdipzone';
$password = '123456';
$sql = "select * from table where username='".$username."' and password='".$password."'";


但如果$password我填入了以下的字符,就能绕过检查了。
$password = "abc' or '1'='1"
查询语句就会变成
select * from table where username='fdipzone' and password='abc' or '1'='1'
这样无论username与password输入什么都能正常通过。


防注入就是把一些会影响的字符转义,例如 ' 等。

09-16 14:50