什么是不安全的直接对象引用

不安全的直接对象引用时,Web 应用程序公开给用户内部实现对象。内部实现对象的一些例子是数据库记录、 Url 或文件。 攻击者可以修改内部实现对象中企图滥用此对象上的访问控制。当攻击者这样做他们可能有能力访问开发人员不希望公开访问的功能。

举个栗子

不安全的直接对象引用是很多种类别的漏洞。有许多例子这些类型的由其他名字在野外发现的漏洞。开放重定向和目录遍历是不安全的直接对象引用漏洞的两个典型的例子。

开放重定向

这是在 Web 应用程序有一个参数,允许其他地方的用户重定向到网站。如果此参数不实现正确使用白名单,攻击者可使用这一网络钓鱼攻击引诱到他们选择的站点的潜在受害者。

目录遍历

假设 Web 应用程序允许为要呈现给用户存储在本地计算机上的文件。如果应用程序不验证应访问哪些文件,攻击者可以请求其他文件系统上的文件和那些也会显示。

例如,如果攻击者通知 URL: https://oneasp.com/file.jsp?file=report.txt

攻击者可以修改文件参数使用目录遍历攻击。他修改的 URL: https://oneasp.com/file.jsp?file=../../../etc/shadow

这样 /etc/阴影文件返回并且呈现由 file.jsp 演示页面容易受到目录遍历攻击。

如何防止不安全的直接对象引用

一如往常,Web 应用程序开发人员可以防止这些攻击通过良好的规划。

开发人员应使用间接引用映射。直接映射很容易被攻击者猜对了。开发人员应该避免暴露给用户的私有对象。文件名称,内部/外部 URL 和数据库键都是不应显示给用户的事情的例子。

如果必须使用直接对象,然后开发人员应确保通过验证,用户有权查看他们正在试图访问。在目录遍历示例中,确定哪些文件用户应该访问并仅授予他们对这些文件的权限。这被称为「接受已知良好」的方法,始终是一个好主意,当它来到开发安全应用程序。

如今,多样化的攻击手段层出不穷,传统安全解决方案越来越难以应对网络安全攻击。OneASP 自适应安全平台集成了预测、预防、检测和响应的能力,为您提供精准、持续、可视化的安全防护。想阅读更多技术文章,请访问 OneAPM 官方技术博客