[03-11 14:24:20] 来源:http://www.67xuexi.com 电脑安全教程 阅读:85108次
访问控制、防火墙、入qin检测系统,以及入qin防御系统组成了一个完整的应用程序安全防线,向应用程序提供了全方位的保护。但是,这些机制并不能百分之百地防御网络应用程序攻击。因为这些应用程序是基于网络的,网络用户与应用程序进行的通讯支持直接的网络攻击,使得已建立的安全防线保护形同虚设。攻击者意识到了这一点,因此直接的网络应用程序攻击是当前大多数网络攻击类型。
为了平衡这种状况,应用程序开发人员必须有意识来建立防御攻击的策略。他们必须要考虑一些构成一系列网络攻击方式的因素:
大多数的网络应用程序开发人员都不是安全方面的专家,也不会意识到大多数存在的问题。
许多开发人员都不会意识到网络应用程序开发中的最佳安全实践方式。
功能通常最受人重视,而安全性问题都会在最后才会得到处理。
部署网络应用程序的环境通常都会发生变化,包括应用程序代码自身的更新,以及基础设施的变化。有一些更改没有受到安全领域专家的足够重视。
如果每一个应用程序开发人员都考虑以下因素的话,那么他们可以写出更好的代码。
得到培训。
查找建立的模式。
将测试集成到开发计划之中。
及早报告漏洞的存在。
本文旨在帮助一些开发人员和部署人员,处理一些影响到 Web 2.0 应用程序的常见网络应用程序安全问题。文中还提供了一些关于移动设备特定安全性问题的介绍。
常见的网络漏洞
移动网络应用程序所遇到的网络安全性问题与桌面网络应用程序所遇到的情形很类似。学习更多关于这些问题和反制措施的资源库是 Top 10 Project on the Open Web Application Security Project(OWASP)网站(参见 参考资料)。
接下来的部分介绍了开发人员必须理解的顶级问题。
跨网站脚本
在这种一般的攻击中,恶意代码会植入到第三方的受信网站之中。如果 HTTP 请求可以将其注入到最终 HTML 页面上的话,那么跨站点脚本漏洞就向这种攻击开放了。
例如,一项服务会接受名为 image 的参数,来接受来自于文件系统的图片,来执行一些处理:
http://somedomain/myImageProcessor?image=myimage.jpg
一个入qin者可以通过向 image 参数插入 JavaScript 代码,来占用该应用程序。其意图是耗尽错误处理系统的资源。如果一个包含恶意脚本的出错信息会被生成的话,那么入qin者就可以利用这一点了:
http://somedomain/myImageProcessor?image=myimage.jpg
如果出错信息返回图片参数的内容,而不用筛选的话,那么代码就会封闭到 作为搜索关键字输入时的结果。脚本代码会在搜索结果中显示出来,代码会得到执行,而警告窗口也会显示出来。
图 3. 输入“JavaScript”作为 JavaScript 执行中的搜索词语结果
反制措施
按照下面的方法来避免跨网站脚本(XSS):
不要向用户显示不受信任的输入。
采取措施预处理输入与输出,以删除恶意代码,例如筛选或者 白板列表(定义什么是允许输入的,什么是不允许输入的)。
Encode 输出以避免浏览器执行。
对于 Altoro Mutual 来说,一个简单的修复操作将不会返回搜索结果。
为了进一步深入讨论跨网站脚本以及预防措施,您可以阅读 developerWorks® 文章“IBM Rational AppScan:跨站点脚本攻击深入解析”,或者在 Open Web Application Security Project(OWASP)培训页面上了解到关于跨网站脚本的内容。(参见 参考资料 以得到资源的链接)。
SQL 注入
这种攻击同样关注于找到请求的缺点,然后向网络呈现的输入区域插入一个 SQL 条目。能够插入查询作为输入区域一部分的入qin者可以轻松绕过一个网站的认证机制,并访问数据库。这种攻击,与跨网站脚本一起已经泛滥了。
这种范例向您展示了怎样使用 SQL 注入来耗尽一个结构糟糕的登录应用程序:
一个网络应用程序会催促您输入一个用户名和密码来进行登录,而 SQL 语句是按照下面的方式组织的:
String query = "SELECT * FROM users WHERE user ='"username+"' AND password ='"passwd"'";
变量 username 以及 password 没有得到细致的处理,并分配给用户在应用程序中输入的值。这就使得一些恶意的用户可以输入 username 之类的值:
anything' OR 1=1 --
密码可以是任意值。在这种情况下,假设它是一个星号:*。
对于输入来说,当代码替换 username 以及 password 变量时,结构化的查询是:
SELECT * FROM users WHERE username ='anything' OR 1=1 -- AND password ='*'
该语句解释了密码需求,并插入状况 1=1,这条语句的值一直都是真的。就算没有相关的权限,攻击者也会被确认为一个有效的用户。
这种攻击在 Altoro Mutual 网络应用程序进行了演示(参见图 4)。切换至登录页面,并输入 anything' OR 1=1 -- 的用户名以及任意的字符作为密码,就可以作为管理员登录了(图 5)。该账户有控制其他用户账户的权限。
图 4. 尝试用任意的一个用户名以及一段 SQL 代码作为密码进行登录
图 5. 执行 SQL 注入攻击之后攻击者作为管理员登录