<尚大教育,教育至上,人才为大:sdedu.cc>
不安全的直接对象引用
(1)应用描述
当开发人员将一个对内部实现对象的引用暴露在外面,使得原本不能看到这个引用对象的用户可以看到,例如,一个文件、目录,能看到的用户就可以通过这个暴露出来的引用对象来猜测其他信息,比如数据库密钥、用户口令等,这样就会产生一个不安全的直接对象引用。或者作为授权的系统用户,攻击者只需要修改指向一个系统对象的直接引用参数值,让其指向另一个无权的对象。
在没有访问控制检测或其他保护时,攻击者会使用这些引用对象去访问未授权数据。考虑系统的用户类型,是否有的用户只具有部分访问权限。
(2)普遍性和可检测性
当生成Web 页面时,应用程序经常使用对象的实名或关键字。而应用程序并不会每次都验证用户是否有权限访问该目标对象,这就导致了不安全的直接对象引用漏洞。测试者能轻易操作参数值以检测该漏洞。代码分析能很快显示应用程序是否进行了适当的权限验证。
(3)影响
这种漏洞能破坏通过该参数引用的所有数据。有可能涉及敏感数据油露和不合理的访问控制。
(4)例子
假设一个比较常见的服务应用,比如说网上银行。在网上银行里面有用户的很多敏感数据及隐私信息。假如我们在查看自己的网上银行页面,选择查看B 为1234567890的网上银行账户的详细信息,作为一个经过身份核实的名为A 的商户,网站会跳转出来显示自己的存款账户信息。我们可以发现,跳转出来的就是用户的账户,这是一个直接的引用。
但是,当在查询账户信息的时候,用户将accountNumber 参数从1234567890 改成1234567891 ,会跳转出对应账户居户B 的存款信息。
<尚大教育,教育至上,人才为大:sdedu.cc>