在PHP中全面阻止SQL注入式攻击之一

在PHP中全面阻止SQL注入式攻击之一

ID:43012881

大小:82.01 KB

页数:8页

时间:2019-09-25

在PHP中全面阻止SQL注入式攻击之一_第1页
在PHP中全面阻止SQL注入式攻击之一_第2页
在PHP中全面阻止SQL注入式攻击之一_第3页
在PHP中全面阻止SQL注入式攻击之一_第4页
在PHP中全面阻止SQL注入式攻击之一_第5页
资源描述:

《在PHP中全面阻止SQL注入式攻击之一》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、引言PHP是一种力量强大但相当容易学习的服务器端脚本语言,即使是经验不多的程序员也能够使用它来创建复杂的动态的web站点。然而,它在实现因特网服务的秘密和安全方面却常常存在许多困难。在本系列文章中,我们将向读者介绍进行web开发所必需的安全背景以及PHP特定的知识和代码-你可以借以保护你自己的web应用程序的安全性和一致性。首先,我们简单地回顾一下服务器安全问题-展示你如何存取一个共享宿主环境下的私人信息,使开发者脱离开生产服务器,维持最新的软件,提供加密的频道,并且控制对你的系统的存取。然后,我们讨论PHP脚本实现中的普遍存在的脆弱性。我们

2、将解释如何保护你的脚本免于SQL注入,防止跨站点脚本化和远程执行,并且阻止对临时文件及会话的“劫持”。在最后一篇中,我们将实现一个安全的Web应用程序。你将学习如何验证用户身份,授权并跟踪应用程序使用,避免数据损失,安全地执行高风险性的系统命令,并能够安全地使用web服务。无论你是否有足够的PHP安全开发经验,本系列文章都会提供丰富的信息来帮助你构建更为安全的在线应用程序。二、什么是SQL注入如果你打算永远不使用某些数据的话,那么把它们存储于一个数据库是毫无意义的;因为数据库的设计目的是为了方便地存取和操作数据库中的数据。但是,如果只是简单地这样

3、做则有可能会导致潜在的灾难。这种情况并不主要是因为你自己可能偶然删除数据库中的一切;而是因为,当你试图完成某项“无辜”的任务时,你有可能被某些人所"劫持"-使用他自己的破坏性数据来取代你自己的数据。我们称这种取代为“注入”。其实,每当你要求用户输入构造一个数据库查询,你是在允许该用户参与构建一个存取数据库服务器的命令。一位友好的用户可能对实现这样的操作感觉很满意;然而,一位恶意的用户将会试图发现一种方法来扭曲该命令,从而导致该被的扭曲命令删除数据,甚至做出更为危险的事情。作为一个程序员,你的任务是寻找一种方法来避免这样的恶意攻击。三、SQL注入工

4、作原理构造一个数据库查询是一个非常直接的过程。典型地,它会遵循如下思路来实现。仅为说明问题,我们将假定你有一个葡萄酒数据库表格“wines”,其中有一个字段为“variety”(即葡萄酒类型):1.提供一个表单-允许用户提交某些要搜索的内容。让我们假定用户选择搜索类型为“lagrein”的葡萄酒。2.检索该用户的搜索术语,并且保存它-通过把它赋给一个如下所示的变量来实现:viewsourceprint?1$variety=$_POST['variety'];因此,变量$variety的值现在为:viewsourceprint?1lagrein3.

5、然后,使用该变量在WHERE子句中构造一个数据库查询:viewsourceprint?1$query="SELECT*FROMwinesWHEREvariety='$variety'";所以,变量$query的值现在如下所示:SELECT*FROMwinesWHEREvariety='lagrein'4.把该查询提交给MySQL服务器。5.MySQL返回wines表格中的所有记录-其中,字段variety的值为“lagrein”。到目前为止,这应该是一个你所熟悉的而且是非常轻松的过程。遗憾的是,有时我们所熟悉并感到舒适的过程却容易导致我们产生自满

6、情绪。现在,让我们再重新分析一下刚才构建的查询。1.你创建的这个查询的固定部分以一个单引号结束,你将使用它来描述变量值的开始:viewsourceprint?1$query="SELECT*FROMwinesWHEREvariety='";2.使用原有的固定不变的部分与包含用户提交的变量的值:viewsourceprint?1$query.=$variety;3.然后,你使用另一个单引号来连接此结果-描述该变量值的结束:viewsourceprint?1$query.="'";于是,$query的值如下所示:viewsourceprint?1SE

7、LECT*FROMwinesWHEREvariety='lagrein'这个构造的成功依赖用户的输入。在本文示例中,你正在使用单个单词(也可能是一组单词)来指明一种葡萄酒类型。因此,该查询的构建是无任何问题的,并且结果也会是你所期望的-一个葡萄酒类型为"lagrein"的葡萄酒列表。现在,让我们想象,既然你的用户不是输入一个简单的类型为"lagrein"的葡萄酒类型,而是输入了下列内容(注意包括其中的两个标点符号):viewsourceprint?1lagrein'or1=1;现在,你继续使用前面固定的部分来构造你的查询(在此,我们仅显示$que

8、ry变量的结果值):viewsourceprint?1SELECT*FROMwinesWHEREvariety='然后,你使用包含用户输

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。