五个常见的Web应用漏洞及其解决方法 » FreeWAF

«

»

15

五个常见的Web应用漏洞及其解决方法

开放Web应用安全项目(OWASP)很快会发布今年的10大Web应用安全漏洞清单。这个清单与去年并没有太大差别,这表明负责应用设计与开发的人仍然没能解决以前那些显而易见的错误。许多最常见的Web应用漏洞仍然广泛存在,许多恶意软件搜索和攻击这些漏洞,连黑客新手都能轻松做到。

本文介绍了5个最常见的Web应用漏洞,以及企业该如何修复初级问题,对抗那些针对这些漏洞的攻击。

注入攻击和跨站脚本攻击

Web应用主要有2种最常见的严重缺陷。首先是各种形式的注入攻击,其中包括SQL、操作系统、电子邮件和LDAP注入,它们的攻击方式都是在发给应用的命令或查询中夹带恶意数据。别有用心的数据可以让应用执行一些恶意命令或访问未授权数据。如果网站使用用户数据生成SQL查询,而不检查用户数据的合法性,那么攻击者就可能执行SQL注入。这样攻击者就可以直接向数据库提交恶意SQL查询和传输命令。举例来说,索尼的PlayStation数据库就曾经遭遇过SQL注入攻击,并植入未授权代码。

跨站脚本(XSS)攻击会将客户端脚本代码(如JavaScript)注入到Web应用的输出中,从而攻击应用的用户。只要访问受攻击的输出或页面,浏览器就会执行代码,让攻击者劫持用户会话,将用户重定向到一个恶意站点或者破坏网页显示效果。XSS攻击很可能出现在动态生成的页面内容中,通常应用会接受用户提供的数据而没有正确验证或转码。

为了防御注入攻击和XSS攻击,应用程序应该配置为假定所有数据——无论是来自表单、URL、Cookie或应用的数据库,都是不可信来源。要检查所有处理用户提供数据的代码,保证它是有效的。验证函数需要清理所有可能有恶意作用的字符或字符串,然后再将它传给脚本和数据库。要检查输入数据的类型、长度、格式和范围。开发者应该使用现有的安全控制库,如OWASP的企业安全API或微软的反跨站脚本攻击库,而不要自行编写验证代码。此外,一定要检查所有从客户端接受的值,进行过滤和编码,然后再传回给用户。

身份验证和会话管理被攻破

Web应用程序必须处理用户验证,并建立会话跟踪每一个用户请求,因为HTTP本身不具备这个功能。除非任何时候所有的身份验证信息和会话身份标识都进行加密,保证不受其他缺陷(如XSS)的攻击,否则攻击者就有可能劫持一个激活的会话,伪装成某个用户的身份。如果一个攻击者发现某个原始用户未注销的会话(路过攻击),那么所有帐号管理功能和事务都必须重新验证,即使用户有一个有效的会话ID。此外,在重要的事务中还应该考虑使用双因子身份验证。

为了发现身份验证和会话管理问题,企业要以执行代码检查和渗透测试。开发者可以使用自动化代码和漏洞扫描程序,发现潜在的安全问题。有一些地方通常需要特别注意,其中包括会话身份标识的处理方式和用户修改用户身份信息的方法。如果没有预算购买商业版本,那么也可以使用许多开源和简化版本软件,它们可以发现一些需要更仔细检查的代码或进程。

不安全的直接对象引用

这是应用设计不当引起的另一个缺陷,它的根源是错误地假定用户总是会遵循应用程序的规则。例如,如果用户的帐号ID显示在页面的URL或隐藏域中,恶意用户可能会猜测其他用户的ID,然后再次提交请求访问他们的数据,特别是当ID值是可以猜测的时候。防止这种漏洞的最佳方法是使用随机、不可猜测的ID、文件名和对象名,而且不要暴露对象的真实名称。常见的错误暴露数据的位置是URL和超链接、隐藏表单域、ASP.NET的未保护视图状态、直接列表框、JavaScript代码和客户端对象(如Java Applet)。每次访问敏感文件或内容时,都要验证访问数据的用户已获得授权。

安全性配置不当

支持Web应用程序的基础架构包含各种各样的设备和软件——服务器、防火墙、数据库、操作系统和应用软件。所有这些元素都必须正确配置和保证安全,应用程序只是运行在最低权限配置上,但是许多系统本身还不够安全。系统管理不当的一个主要原因是Web应用程序管理人员和基础架构支持人员从未接受过必要的培训。

为执行日常网络应用管理的人员提供足够的培训和资源,这是在开发过程中所有阶段保证安全性和保密性的重要条件。最后,要为Web应用程序安排一个渗透测试,处理所有敏感数据。这是一种主动评估应用抵抗攻击能力的方法,可以在受到攻击前发现系统漏洞。

结束语

一直以来,这5种常见的Web应用漏洞都是IT安全的痛处。它们并不是新漏洞,但是它们都没有解决,在人们对Web应用安全有足够认识之前,攻击者仍然会想尽办法继续利用这些缺陷发起偷盗、欺骗和网络间谍等攻击。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>