摘要:指向特定文件、数据库记录或目录的Web应用程序容易遭受攻击。本文探讨对象引用如何影响企业网络安全,并讨论防御此攻击的方法。 |
不安全的直接对象引用举例
这里的“对象”是指文件、目录、数据库记录等内部实施的对象,在应用程序将URL(或表单参数)中的一个引用暴露给这些对象之一时,就会发生安全问题。这是因为黑客可以修改这些直接对象引用,例如,黑客可以在一个URL被提交之前进行参数修改,企图访问一个不同的、未获得授权的文件、目录,或数据库中的条目。如果不加强其它的授权检查,这种企图就会成功。
假设有一个Web应用程序最终会生成下面这个URL:
http://www.yourinsecurewebapp.com/yourgetfile.cfm?filename=yoursometextfile.txt
这里有一个非常明显的对yoursometextfile.txt文件的直接对象引用。它对黑客的诱惑在于,看到如果将这个文件名换成另外一个文件名(如“yourpasswords.txt”或“youraccounts.txt”)会发生什么。
要取得这种成功,黑客必须正确地猜测出系统上另外一个文件名,但一个更合理的方法,是寻找系统上其它位置的特定内容,其使用的方法就是目录遍历攻击(目录遍历是Http的一个安全漏洞,它使得攻击者能够访问受限制的目录,并能够在Web服务器的根目录以外执行命令。)。从本质上讲,这意味着访问一个完全不同的目录,或者存在漏洞的应用程序的开发者所构建的任何方面。为访问Apache Tomcat文件名和口令,黑客可能将URL的最后一部分改成:
?filename=../../tomcat/conf/tomcat-users.xml
并非所有的直接对象引用都提供对文件的访问。还有另外一种可能激发黑客兴趣的URL,其结尾格式如下:
...account.cfm?customerid=4567
这会使黑客进一步问,“如果我将客户ID(customerid)换成4568会发生什么?”
与此类似,如果一个Web应用程序允许一个用户根据数据库的关键字引用从存储在数据库中的一个或多个信用卡中的一个,那么黑客修改此数据库的关键字时,会发生什么呢?
<s e l e c t name="choosecreditcard">
<option value="56">
XXXXXXXXXXXX6902
</option>
<option value="88">
XXXXXXXXXXXX5586
</option>
</s e l e c t>