java web 防止sql注入攻击_如何测试WEB应用程序防止SQL注入攻击

摘要:

在WEB应用程序的软件测试中,安全测试是非常重要的一部分,但常常容易被忽视掉。在安全测试中,防止SQL注入攻击尤其重要。本文介绍了SQL注入攻击产生的后果以及如何进行测试。

关键字:安全测试 SQL 注入攻击 防火墙

正文:

WEB应用程序的安全测试,防止SQL注入攻击,下面举一些简单的例子加以解释。——Inder P Singh。

许多应用程序运用了某一类型的数据库。测试下的应用程序有一个接受用户输入的用户界面,这些输入值用来执行下列任务。

给用户显示相关的存储数据。例如,程序通过用户输入的登录信息检查用户凭证(权限),从而只显示相关的功能和数据。

将用户输入的数据存储到数据库中。例如,用户填写了一张表格并提交,程序立即将之存储到数据库中;从而,用户可以在本次会话和下次会话中获取这些数据。

一些用户输入值可能会被接下来程序将执行的SQL语句运用到,而程序有可能不会正确执行用户输入的值。如果是这样的话,蓄意用户可以向程序提供非法数据,这些数据接下来被运用到框架中并且用来在数据库中执行SQL语句。这就是SQL注入。该行为的结果令人鸣起警钟。

SQL注入可能导致以下结果:

用户可以以另一用户的身份登录到程序,甚至是管理员的身份。

用户可以看到其他用户的隐私信息,如其他用户的简介细节,交易细节。

用户可以修改应用程序配置信息以及其他用户的数据。

用户可以修改数据库的结构,甚至是删除应用数据库中的表格。

用户可以控制数据库服务器并且按照自己意愿随意执行命令。

因为允许SQL注入的结果是相当严重的,所以在应用程序的安全测试阶段应对SQL注入进行测试。通过对SQL注入技术有一个总体的概括,让我们来理解一些SQL注入的实际例子!

重点:SQL注入问题只能在测试环境中测试

若应用程序页面有登录功能,程序有可能使用如下所示的动态SQL语句。这条语句本应从用户表中返回至少一条用户详细信息作为结果,当SQL语句中含有输入的用户名和密码时。

SELECT * FROM Users WHERE User_Name = ‘” & strUserName & “‘ AND Password = ‘” & strPassword & “’;”

如果测试人员输入John作为用户名(用户名文本框),输入Smith作为密码(密码文本框),上述SQL语句就变成:

SELECT * FROM Users WHERE User_Name = ‘John’ AND Password = ‘Smith’

如果测试人员输入John’-作为用户名,不输入密码,那么SQL语句变成:

SELECT * FROM Users WHERE User_Name = ‘John’– AND Password = ‘’;

我们可以注意到,SQL语句中John后面的部分成为了注释。如果用户表中有一些用户用户名为“John”,那么程序能够允许测试人员以用户John的身份登录,这样,测试人员可以看到用户John的隐私信息。

如果测试人员不知道任何程序中已存在的用户该怎么办呢?在这种情况下,测试人员可以尝试相似的用户名像“admin”,“administrator”,“sysadmin”。如果这些用户名在数据库中都不存在,测试人员可以输入John’ or ‘x’=’x作为用户名,Smith’ or ‘x’=’x作为密码。那么SQL语句如以下所示:

SELECT * FROM Users WHERE User_Name = ‘John’ or ‘x’='x’ AND Password = ‘Smith’ or ‘x’=’x’;

因为‘x’=’x’这一条件总是成立的,结果集包含用户表中所有行。程序允许测试人员以用户表中第一个用户的身份登录进去。

重点:测试人员在尝试下列SQL注入之前应该请求拥有数据库管理员或者开发人员权限以备份有问题的表格。

如果测试人员输入John’; DROP table users_details;’—作为用户名,任意值作为密码,那么SQL语句如下所示:

SELECT * FROM Users WHERE User_Name = ‘John’; DROP table users_details;’ –‘ AND Password = ‘Smith’;

这条语句将造成表格“users_details”从数据库中永久删除。

虽然上述例子说明的是页面中登录功能上运用SQL注入技术,但是测试人员应在应用程序中所有接受用户输入的页面运用该技术测试,如搜索页面,反馈页面等等。

SQL注入可能出现在运用了SSL的程序中,即使是防火墙也不能防御SQL注入攻击。

本文中,我尽量以简单的形式解释SQL注入技术。再次强调,SQL注入只能在测试环境中测试,不能再开发环境,生产环境或者其他任何环境下测试。除了手工测试程序是否易受SQL注入攻击,我们还应该使用web vulnerability scanner(一款扫描工具)来检查SQL注入。

posted on 2013-08-12 10:22 顺其自然EVO 阅读(654) 评论(0)  编辑  收藏

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值