码迷,mamicode.com
首页 > 数据库 > 详细

在web开发中你不得不注意的安全验证问题#1-SQL

时间:2014-06-18 12:08:38      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:web开发   sql注入   漏洞   信息安全   正则表达式   

前言

随着WEB开发的发展如日中天,越来越多的程序猿加入这个行列,尤其是在大型项目团队开发的过程中,程序员们的水平参差不齐。导致各种各样的安全验证不严密导致各种问题。正如那句话所说,水桶能装水的多少不取决于最高的挡板,而是最低的挡板。
那今天我就给大家演示一下常见的安全问题SQL的形成原因和预防。


环境准备

我本来打算用java做实验的,考虑到PHP的话比较快,就用PHP演示吧。
下面是我连接数据库的代码以及数据库的内容。文件名sql.php
<?php 
	$conn=mysql_connect('localhost','root','root') or die("数据库连接失败");
	mysql_query("set names gb2312");
	mysql_select_db("mytest");
	$id=$_GET['id'];
	$sql2="select * from user where id =".$id;
	$result2=mysql_query($sql2);
	while($alluser=mysql_fetch_array($result2))
	{
		echo $alluser["name"]."==>".$alluser["school"]."<br>";
	}
	mysql_close($conn);
 ?>
这是很常见的连接数据库代码,数据库中有三个字段分别是id title content
那我们访问我们的地址
http://127.0.0.1/safe/sql.php?id=1
从数据库中读取id为1的内容,并输入到页面。
bubuko.com,布布扣
访问正常.那么如果我们构造URL成这个样子呢?
http://127.0.0.1/safe/sql.php?id=1 and 1=1          //这个是显示正常的,意思是把and后的也一起查询。1=1显然成立
http://127.0.0.1/safe/sql.php?id=1 and 1=2         //这个是显示不正常的,意思是把and后的也一起查询。1=2显然不成立
结果如下图
bubuko.com,布布扣

这样是很明显有SQL注入的漏洞的。
你以为这个漏洞没什么影响么?那你大错特错了。

稍微有点数据库的知识就可以构造一下查询的语句

bubuko.com,布布扣
如上可看到,我们用order这个方法的时候,可以猜测到一共有多少字段,很显然3个是正确的。

那么接下来可以用union来连接查询,前提知道管理员表名。

构造URL如下

http://127.0.0.1/safe/sql.php?id=1 union select 1,2,3 from admin
这可能需要一点数据库知识,意思是连接查询,可将显示位输出到当前页面。
结果如下
bubuko.com,布布扣
很显然多出了一个1和2的显示位,那么就可以得到敏感信息了。
构造如下
127.0.0.1/safe/sql.php?id=1 union select username,password,3 from admin
意思不在累述。
结果如下
bubuko.com,布布扣
这样你的后台管理账号和密码就被显示出来了,如果你的项目后台被别人登陆,后果不堪设想!

PS:本文只是为提高程序猿的安全意识,加强安全防护,请不要用于非法用途!由于水平有限,本文只做抛砖引玉,转载请注明出处,谢谢。

那么怎么预防这个问题呢?这个也是很简单的,只要在GET或POST中过滤一下参数就可以了。用正则表达式或者其他都是可以的。目前的很多框架都是已经过滤的,具体怎么用就交给你自己了哦。实在不会的话可以留言。



在web开发中你不得不注意的安全验证问题#1-SQL,布布扣,bubuko.com

在web开发中你不得不注意的安全验证问题#1-SQL

标签:web开发   sql注入   漏洞   信息安全   正则表达式   

原文地址:http://blog.csdn.net/ibey0nd/article/details/31433657

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!