SQL注入

结构化查询语言(SQL)是一种用来和数据库交互的文本语言。SQL Injection 就是利用
某些数据库的外部接口将用户数据插入到实际的数据库操作语言(SQL)当中,从而达到入
侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行严格的
过滤,导致非法数据库查询语句的执行。
SQL 注入(SQL Injection)攻击具有很大的危害,攻击者可以利用它读取、修改或者
删除数据库内的数据,获取数据库中的用户名和密码等敏感信息,甚至可以获得数据库管理

员的权限,而且,SQL Injection 也很难防范。网站管理员无法通过安装系统补丁或者进行简
单的安全配置进行自我保护,一般的防火墙也无法拦截SQL Injection 攻击。
下面的用户登录验证程序就是SQL 注入的一个例子(以PHP 程序举例)。
(1)创建用户表user:
CREATE TABLE user (
userid int(11) NOT NULL auto_increment,
username varchar(20) NOT NULL default '',
password varchar(20) NOT NULL default '',
PRIMARY KEY (userid)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
(2)给用户表user 添加一条用户记录:
INSERT INTO `user` VALUES (1, 'angel', 'mypass');
(3)验证用户root 登录localhost 服务器:
<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "injection";
mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败");
$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);
if (empty($userinfo))
{
echo "登录失败";
} else {
echo "登录成功";
}
echo "<p>SQL Query:$sql<p>";
?>
(4)然后提交如下URL:
http://127.0.0.1/injection/user.php?username=angel' or '1=1
结果发现,这个URL 可以成功登录系统,但是很显然这并不是我们预期的结果。同样
也可以利用SQL 的注释语句实现SQL 注入,如下面的例子:
http://127.0.0.1/injection/user.php?username=angel'#
因为在SQL 语句中,“/*”或者“#”都可以将后面的语句注释掉。这样上述语句就可
以通过这两个注释符中任意一个将后面的语句给注释掉了,结果导致只根据用户名而没有密
码的URL 都成功进行了登录。利用“or”和注释符的不同之处在于,前者是利用逻辑运算,
而后者则是根据MySQL 的特性,这个比逻辑运算简单得多了。虽然这两种情况实现的原理
不同,但是达到了同样的SQL 注入效果,都是我们应该关注的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值