防止xml注入漏洞攻击 PHP网络开发详解:SQL注入漏洞[1]
PHP网络开发详解:SQL注入漏洞[1]
![防止xml注入漏洞攻击 PHP网络开发详解:SQL注入漏洞[1]](http://img.zhputi.com/uploads/cdfd/cdfdda95d55de3a78a408b1f3134487324791.jpg)
——此文章摘自《完全手册PHP网络开发详解》定价 ¥ 特价 ¥ 详细>>//track linktech cn/?m_id=dangdang&a_id=A &l= &l_type = width= height= border= nosave>
SQL注入是网络攻击的一种常见手法 攻击者通过对页面中的SQL语句进行拼组来获得管理账号 密码及更多的其他信息 这种攻击方法对于网站的危害是非常大的 SQL注入攻击的一般方法
以下代码是一个简单的数据输出页面 该页面通过从浏览器地址栏获得参数来显示相应的内容 <?php $id = $_GET[ id ]; //获得参数 $sql = SELECT * FROM posts WHERE postid = $id ; //定义SQL mysql_connect( localhost root ); //连接服务器 mysql_select_db( guestbook ); //连接数据库 $rs = mysql_query($sql); //执行SQL if(mysql_numrows($rs)) //如果记录存在 则输出 { $row_rs = mysql_fetch_assoc($rs); echo TOPIC: $row_rs[ topic ] <br> ; } else //否则提示错误 { echo Record not found! ; } ?>
上面的代码通过获得id参数的值来进行数据查询 并在页面上显示相应的数据信息 如果数据无法从数据库中找到 则显示相应的错误信息 例如 从浏览器上访问// / bugs/eg php?id= 可以获得如下结果 Topic: This is a test!!
这里 SQL注入的方法是通过对id参数的赋值来构造一个用户自定义的SQL语句给程序执行来实现的 例如 从浏览器上访问// /bugs/eg php?id= and = 仍然可以看到上面的结果 但是 此时程序实际上执行的SQL语句如下所示 SELECT * FROM posts WHERE postid = and =
可以看出 由于程序简单地将id参数放置在SQL语句中 实际上程序已经允许用户自由地运行SQL语句了 从浏览器上访问// /bugs/eg php?id= and = 可以看到页面的运行结果如下所示 Record not found!
这是因为程序执行了如下的SQL语句致使记录没有成功返回而造成的 SELECT * FROM posts WHERE postid = and =
有了这一基础 就可以通过猜测存储管理员的用户名和密码的表名和列名来对网站进行SQL注入攻击了 例如 当前用于存储管理员用户的数据表名为admin 在浏览器上访问// /bugs/eg php?id= and (select length(adminname) from admin limit )> 可以使PHP程序对admin表进行查询并获得当前用于存储管理员账号和密码的列名 如果上面的访问可以使页面内容正常显示 则说明猜测正确 实际上 上面的访问执行了下面的SQL语句
lishixinzhi/Article/program/PHP/201311/21468