SQL注入:从原理到实践

SQL注入:从原理到实践

《SQL注入攻击与防御 Justin Clarke》学习心得

SQL注入原理

web应用的一般架构

数据库驱动的web应用通常包含三层,第一层是呈现在HTML引擎上面的表示层,第二层是利用编程语言搭建的逻辑层,第三层是数据库交互的存储层,一般情况下,表示层不直接和存储层通信。有些时候,在存储层和逻辑层之间会有一层应用层,这层应用层为逻辑层提供API,应用层通过查询、更新数据库来响应表示层的请求。

理解SQL注入

sql注入是一种将SQL语句代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。

一个典型的SQL注入语句是 ’ or ‘1’ = '1

简单的例子:

在php语言的一个中间层中的脚本如下:
$query = "SELECT * FROM CMSUsers WHERE USER ='$_GET["user"]'"
		 "AND password = '$_GET["password"]'";
...
if($rowcount !=0){
   login success.};
这个代码中只要返回了一个记录,那么coder认为他就是有效的,因此认为登录成功,我们可以在password中输入万能脚本语句' or'1'='1
使得其返回多条记录,从而绕过登录系统
有效的防御方法

百度中可以得到很多有效的方法抵御SQL注入,一个典型的方法是使用参数化的查询方法,简单的说,就是在得到用户的输入之后,检查用户的输入的长度、格式是否满足一般的输入参数的要求。例如,我们可以使用:

$query = "SELECT * FROM CMSUsers WHERE USER ='$_GET["user"]'"+
		 + request.Getparameter("input") + " ' ";

SQL注入常见诱因

  • 转义字符处理不当–单引号的检查

通常,SQL语言将单引号字符解析成代码与数据间的分界线,单引号的外面是需要运行的代码,而单引号内是数据,因此,检查一个网站是否易受SQL注入,只需要在输入处输入一个单引号即可。

如果输入一个单引号,我们很可能会得到以下几种错误的一种:

Warning: mysql_fetch_assoc():
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值