`
sxysxy
  • 浏览: 215441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
SQL注入是网络攻击的一种常见手法,攻击者通过对页面中的SQL语句进行拼组来获得管理账号、密码及更多的其他信息。这种攻击<nobr oncontextmenu="return false;" onmousemove="kwM(1);" id="key1" onmouseover="kwE(event,1, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC(event,1);" onmouseout="kwL(event, this);" target="_blank">方法</nobr>对于网站的危害是非常大的。

SQL注入攻击的一般方法

<clk></clk>以下代码是一个简单的数据输出页面,该页面通过从<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC(event,2);" onmouseout="kwL(event, this);" target="_blank">浏览器</nobr>地址栏获得参数来显示相应的内容。
<?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://127.0.0.1/ bugs/eg2.php?id=9可以获得如下结果。
Topic: This is a test!!

<clk></clk>这里,SQL注入的方法是通过对id参数的赋值来构造一个用户自定义的SQL语句给<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC(event,0);" onmouseout="kwL(event, this);" target="_blank">程序</nobr>执行来实现的。例如,从浏览器上访问http://127.0.0.1/bugs/eg2.php?id=9 and 1=1,仍然可以看到上面的结果。但是,此时程序实际上执行的SQL语句如下所示。
SELECT * FROM posts WHERE postid = 9 and 1=1

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

这是因为程序执行了如下的SQL语句致使记录没有成功返回而造成的。
SELECT * FROM posts WHERE postid = 9 and 1=2

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

SELECT * FROM posts WHERE postid = 9 and (select length(adminname) from admin
limit 0,1)>0

就这样,通过对数据库字段长度的逻辑判断获得了存储管理员账号和密码的表名和列名。下一步,就可以通过对管理员账号和密码的每个字符的ASCII码的判断来获得管理员账号了。例如,当前管理员的账号为admin,在浏览器上访问http://127.0.0.1/bugs/eg2.php?id=9 and (select ascii(substr(adminname,1,1)) from admin limit 0,1)=97可以使网页正常显示,这是因为当前管理员账号为admin,通过使用ascii函数和substr函数来获取第一个字母的ASCII码为 97。当SQL中的逻辑成立时,页面就可以正常地显示了。

漏洞防护措施

前面所述的攻击方法虽然很烦琐,但是只要有充足的时间,完全可以通过前面所示的PHP代码来获取管理员的账号和密码,并对网站数据进行修改。解决这一问题的方法很简单,就是对通过地址栏传入的参数的值进行判断或者格式化处理,如以下代码所示。
<?php
$id = (int)$_GET['id']; //通过对id参数进行数据类型转换过滤掉非法SQL字符
$sql = "SELECT * FROM posts WHERE postid = $id";//定义SQL
echo "SQL: ".$sql."<br>"; //输出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!";
}
?>

上面的代码首先将传入的参数的值转换为整型数据,然后再放入SQL语句中执行。这一简单的举措可以将地址栏中的非数字字符全部过滤掉,大大增强了系统的安全性。

分享到:
评论

相关推荐

    安卓桌面应用EyeRoom.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    仿随手记的炫酷饼图.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    webview重载使用&自定义网址.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    C语言学习工程和C语言项目.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    带暂停功能倒计时TimeCountDown盒子适用.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    Google翻译.txt

    Google翻译.txt

    汽车车灯检测机械臂设计.doc

    汽车车灯检测机械臂设计.doc

    网络购物中心项目源码.rar

    网络购物中心项目源码.rar是一个压缩文件包,包含了一个基于Web技术的电子商务平台的全部源代码和相关资源。这个源码包旨在提供一个功能全面、界面友好的在线购物体验,它集成了商品浏览、搜索、购买、支付以及用户管理等核心电商功能。该项目采用了当下流行的开发框架和编程语言,比如使用HTML5, CSS3, JavaScript, PHP和MySQL数据库等技术,确保了网站的响应速度和跨浏览器兼容性。对于即将毕业的学生或者正在寻找实践项目的课程设计者来说,这个源码包是一个宝贵的资源。它不仅提供了一个实际应用的平台以供学习和研究,还允许用户根据需求进行定制和扩展,如添加新的功能模块或优化现有的代码结构。此外,项目文档详细记录了系统架构、功能实现和部署流程,为初学者提供了清晰的指引。通过分析和修改这份源码,学生可以深化对Web开发的理解,提高编程能力,并且有机会将理论知识转化为实际操作技能。此源码包适合作为计算机科学与技术、软件工程、信息技术等相关专业的毕业设计或课程设计项目,能够帮助学生在完成学业的同时,积累实战经验,增强就业竞争力。无论是作为学习的起点,还是作为未来职业生涯的一个跳板,网络购物

    C语言仓库,存储的是C语言代码.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    Sora AI Videos的案例站点

    这是Sora AI Videos的案例站点,使用此项目可以帮助你快速构建Sora AI的演示项目。

    2015园林业务齐发展,区域拓展加速(20页).zip

    2015园林业务齐发展,区域拓展加速(20页).zip

    机械臂的物体识别与抓取技术研究.pdf

    机械臂的物体识别与抓取技术研究.pdf

    使用不同的超导间隙模型拟合从穿透深度获得的超流体密度数据matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    一个年终抽奖系统,可以根据你需要的去设置

    年终抽奖系统的模型,需要需要特殊定值,可以留言

    埃博拉优化搜索算法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    ECommerceCrawlers-master.zip

    实战多种网站、电商数据爬虫。包含:淘宝商品、微信公众号、大众点评、闲鱼、阿里任务、百度贴吧、豆瓣电影、包图网、全景网、豆瓣音乐、某省药监局、搜狐新闻、机器学习文本采集、fofa资产采集、汽车之家️️️

    viewflow视图切换效果.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    可二次开发广州酒店信息管理平台.rar

    广州酒店信息管理平台是一个针对酒店行业设计的综合性信息管理系统,旨在通过现代化的信息技术手段提高酒店运营效率、改善客户体验,并为管理者提供决策支持。该平台以用户友好的界面和强大的数据处理能力为特点,涵盖了客房预订、入住管理、餐饮服务、库存管理、财务报表等多个模块,实现了酒店业务流程的自动化和智能化。作为毕业设计或课程设计项目,这个平台提供了丰富的功能和灵活的二次开发环境。学生可以根据自己的专业知识和兴趣,对现有系统进行深入分析,提出创新改进方案,或者添加新的功能模块。例如,可以通过集成人工智能算法来优化房间分配策略,利用大数据分析技术预测市场趋势,或者开发移动端应用以便客户能够随时随地访问服务。源码文件包中包含了完整的系统架构设计文档、数据库结构、前后端代码以及详细的API文档,使得学生能够快速理解系统运作机制并开始二次开发。此外,平台采用了模块化的设计思想,便于学生按需修改或扩展功能,同时也有助于培养学生的软件工程实践能力和解决实际问题的能力。总之,广州酒店信息管理平台不仅为学生提供了一个实战演练的机会,而且通过实际操作加深了对酒店管理业务和软件开发流程的理解,是一份极具挑战性和实用

    百度翻译.txt

    百度翻译.txt

    python源码python基础

    python源码python基础提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics