文档详情

网络安全经典讲解SQL注入防范方法.docx

发布:2017-12-22约9.11千字共15页下载文档
文本预览下载声明
经典讲解SQL注入原理及防范方法伴随着Web2.0、社交网络、微博等一系列新型互联网产品的兴起,基于Web环境的互联网应用越来越广泛,Web攻击的手段也越来越多样,Web安全史上的一个重要里程碑是大约1999年发现的SQL注入攻击,之后的XSS,CSRF等攻击手段愈发强大,Web攻击的思路也从服务端转向了客户端,转向了浏览器和用户。SQL注入常见攻击技巧SQL注入攻击是Web安全史上的一个重要里程碑,它从1999年首次进入人们的视线,至今已经有十几年的历史了,虽然我们现在已经有了很全面的防范对策,但是它的威力仍然不容小觑,SQL注入攻击至今仍然是Web安全领域中的一个重要组成部分。以PHP+MySQL为例,让我们以一个Web网站中最基本的用户系统来做实例演示,看看SQL注入究竟是怎么发生的。1、创建一个名为demo的数据库:1CREATEDATABASE`demo`DEFAULTCHARACTERSET utf8 COLLATE utf8_general_ci;2、创建一个名为user的数据表,并插入1条演示数据:123456CREATETABLE`demo`.`user` (`uid`INT( 11 ) NOTNULL AUTO_INCREMENT PRIMARY KEYCOMMENT用户uid,`username`VARCHAR( 20 ) NOTNULLCOMMENT用户名,`password`VARCHAR( 32 ) NOTNULLCOMMENT用户密码) ENGINE = INNODB;INSERTINTO`demo`.`user` (`uid`, `username`, `password`) VALUES (1, plhwin, MD5(123456));实例一通过传入username参数,在页面打印出这个会员的详细信息,编写?userinfo.php?程序代码:1234567891011121314151617181920212223?phpheader(Content-type:text/html; charset=UTF-8);$username = isset($_GET[username]) ? $_GET[username] : ;$userinfo = array();if($username){//使用mysqli驱动连接demo数据库$mysqli = new mysqli(localhost, root, root, demo);$sql = SELECT uid,username FROM user WHERE username={$username};//mysqli multi_query 支持执行多条MySQL语句$query = $mysqli-multi_query($sql);if($query){do {$result = $mysqli-store_result();while($row = $result-fetch_assoc()){$userinfo[] = $row;}if(!$mysqli-more_results()){break;}} while ($mysqli-next_result());}}echopre,print_r($userinfo, 1),/pre;上面这个程序要实现的功能是根据浏览器传入的用户名参数,在页面上打印出这个用户的详细信息,程序写的这么复杂是因为我采用了mysqli的驱动,以便能使用到?multi_query?方法来支持同时执行多条SQL语句,这样能更好的说明SQL注入攻击的危害性。假设我们可以通过?http://localhost/test/userinfo.php?username=plhwin?这个URL来访问到具体某个会员的详情,正常情况下,如果浏览器里传入的username是合法的,那么SQL语句会执行:1SELECT uid,username FROMuserWHERE username=plhwin但是,如果用户在浏览器里把传入的username参数变为?plhwin;SHOW TABLES-- hack,也就是当URL变为?http://localhost/test/userinfo.php?username=plhwin;SHOW TABLES-- hack?的时候,此时我们程序实际执行的SQL语句变成了:1SELECT uid,username FROMuserWHERE username=plhwin;SHOWTABLES-- hack注意:在MySQL中,最后连续的两个减号表示忽略此SQL减号后面的语句,我本机的MySQL版本号为5.6.12,目前几乎所有SQL注入实例都是直接采用两个减号结尾,但是实际测试
显示全部
相似文档