[03-11 14:24:20] 来源:http://www.67xuexi.com 电脑安全教程 阅读:85108次
就像跨网站脚本一样,这种攻击是糟糕的或者根本不存在的输入检验和确认系统造成的结果。
反制措施
您可以执行以下操作以防御这种攻击:
不信任来自用户的所有输入。
采取措施来检验用户的输入,例如筛选或者白板列表。
在 Altoro Mutual 案例中,一个可能的解决方案是筛选来自 Username 与 Password 区域的非字母数字字符。
如果您想要得到更多关于 SQL 注入以及可能反制措施的信息,您可以阅读 OWASP 培训页面以了解 SQL 注入(参见 参考资料)。
信息泄露
一个有意志的攻击者可以通过识别缺点来研究一项应用程序。例如,一个攻击者可以按照不同的方式来获取信息:
手动研究应用程序以做到隐藏的目录
系统性地收集例外情况,以查看应用程序是否给出了详细的例外情况
扫描 HTML 以得到揭示应用程序基础及行为具体内容的注释
系统性地输入用户名以找出已存在的账户
Altoro Mutual 应用程序会在系统之中泄露已存在的用户名。例如,在图 6 中,输入一个不正确的用户名和密码会产生这种出错信息:“登录失败:抱歉,在我们的系统中找不到该用户名。请重新尝试。”
图 6. 应用程序清晰地声明系统中没有做到该用户
接下来,入qin者会尝试用户名 jsmith,而 Altoro Mutual 网络应用程序会收到以下的信息:“登录失败:您输入的密码无效,请确认后重新输入密码”。于是,入qin者从以上信息上了解到有一个用户账户名为 jsmith。在此基础之上,入qin者可以把注意力放到破jie密码上面,或者使用暴力破jie方法来发现密码。
图 7. Altoro Mutual 应用程序泄漏了用户名 jsmith 的存在
在这种情况之下,修复方法可以是产生一种通用的登录信息,不会精确地指出什么地方没有输对,例如:“登录失败:用户名或者密码无效。请确认后重新输入您的信息”。
反制措施
对于应用程序来说,信息泄漏需要受到人们的重视,开发人员的意识是最好的防御手段。记住这一点,开发人员可以考虑一些减轻问题的措施。
所有评论的清晰 HTML 代码会揭示应用程序的实际情况。
不要在浏览器中显示特定的例外。如果必须登录,将它们存储在服务器上,并显示常见的错误。
不要揭示哪一部分的认证错误。
同样,配置网络服务器和应用程序服务器设置,以避免在网站和应用程序上任意的导航。
这种类型的信息泄漏不会再耗费您的精力了。查找特定应用程序和运行环境存在的其他泄漏问题。
您可以在 OWASP 培训页面上找到关于信息泄漏的更多信息。
参数干扰
这些类型的攻击旨在控制传递给应用程序的参数。想象一下一段糟糕的应用程序让客户来设置要购买商品的价格。这一应用程序可以发送以下的请求:
http://somedomain/myStore?item=1234&price=$200
如果业务逻辑并不会在服务器端执行任何类型的双重-检查的话,那么入qin者可以更改价格,以更低的价格买到商品。在这种情况下,允许从客户端更改价格显然是一个 bug。
反制措施
为了解决这一特定示例中的问题,您可以更改代码以从服务器的数据库端获得价格的信息,避免价格控制问题的产生。
避免这种类型攻击的反制措施包括:参数确认,以及对应用程序逻辑进行仔细检查。
如果您想要得到关于参数干扰和可能反制措施的更多信息,那么您可以在网络参数干扰上阅读 OWASP 培训页面(参见 参考资料)。
cookie 破坏
所谓的 cookie(缓存)就是服务器向客户端发送的信息,作为关键字/值对存储在一个文本文件或者内存之中。它的内容可以被创建该内容的网络应用程序使用。在执行一次网络应用程序之后编辑缓存的内容,缓存 破坏 攻击就发生了。
反制措施
cookie 破坏的反制措施包括参数认证,以及应用程序代码和逻辑的仔细检查。
高级安全性机制也可以得到应用。
一种常见的方法是使用数字签名,来确认文本文件存储没有受到篡改。
另一种反制措施是在传递期间将其加密,以保护缓存。
对于未确认的输入问题,cookie 破坏将会在 OWASP 页面上进行讨论(参见 参考资料)。
将安全性集成到开发过程之中
安全成为网络应用程序开发的一个重要组成部分,也是移动网络应用程序的组成部分。许多公司机构非常注重软件交付。但是,在交付阶段修复一项缺陷的成本是非常高的。因此,将安全性评审和测试作为开发过程必要的一部分,是非常明智的。
在整个开发过程中,从设计到部署,集成式地考虑安全性问题是最有效的。
设计阶段
在设计阶段,需要识别什么信息需要保护,存在什么风险,是否可以采取什么反制措施。在早期阶段所有可能的地方,将来自公司内部的安全专家加入到所有讨论和决策过程当中。这降低了开发周期晚期阶段才发现错误的可能性。晚期阶段才发现问题会导致问题解决起来更加困难和代价高昂。在设计阶段识别实践性的场景以便测试。这有助于为开发周期的测试建立一个集成化的进程。部署过程中不断增加的安全性测试(例如压力测试)可以帮助一家公司优化需要的技术,以确保品质优良的应用程序的开发。
开发阶段
培训开发人员去熟悉一些常见的问题以及安全性代码实践。在代码评审过程之中,处理安全性问题,包括机构的安全领域问题。实施安全测试,评审它们,并将它们加入到自动化测试套件内。开发团队应该计划一下处理代码评审和测试期间找到的安全性问题。