php

位置:IT落伍者 >> php >> 浏览文章

PHP网络开发详解:SQL注入漏洞[1]


发布日期:2020年10月15日
 
PHP网络开发详解:SQL注入漏洞[1]
——此文章摘自《完全手册PHP网络开发详解》定价 特价 详细>>http://tracklinktechcn/?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参数的值来进行数据查询并在页面上显示相应的数据信息如果数据无法从数据库中找到则显示相应的错误信息例如从浏览器上访问http:/// bugs/egphp?id=可以获得如下结果

Topic: This is a test!!

这里SQL注入的方法是通过对id参数的赋值来构造一个用户自定义的SQL语句给程序执行来实现的例如从浏览器上访问http:///bugs/egphp?id= and =仍然可以看到上面的结果但是此时程序实际上执行的SQL语句如下所示

SELECT * FROM posts WHERE postid = and =

可以看出由于程序简单地将id参数放置在SQL语句中实际上程序已经允许用户自由地运行SQL语句了从浏览器上访问http:///bugs/egphp?id= and =可以看到页面的运行结果如下所示

Record not found!

这是因为程序执行了如下的SQL语句致使记录没有成功返回而造成的

SELECT * FROM posts WHERE postid = and =

有了这一基础就可以通过猜测存储管理员的用户名和密码的表名和列名来对网站进行SQL注入攻击了例如当前用于存储管理员用户的数据表名为admin在浏览器上访问http:///bugs/egphp?id= and (select length(adminname) from admin limit )>可以使PHP程序对admin表进行查询并获得当前用于存储管理员账号和密码的列名如果上面的访问可以使页面内容正常显示则说明猜测正确实际上上面的访问执行了下面的SQL语句

right>[] [http://developcsaicn/web/htm>]

               

上一篇:PHP网络开发详解:SQL注入漏洞[2]

下一篇:正确理解PHP程序编译时的错误信息