asp.net - 通过 URL 传递 GUID 的安全风险

标签 asp.net security guid

我从安全角度寻求一些关于使用 GUID 的建议。我开发了一个 ASP.Net 应用程序。它使用户能够访问不在 Web 服务器上的某些 Material ,例如文档和照片。这些都存储在文件服务器上。我有一个“GetResource.aspx”页面,它获取资源的 ID,使用 System.IO.FileInfo 打开它,将其写入响应流并返回它。

因此,GetResource.aspx?id=123 将返回用户有权访问的图片。当然,用户可以手动输入 GetResource.aspx?id=456 的 URL,在这种情况下,具有该 ID 的图片/文档等将被返回,并且可能不是他们有权访问的。

很明显,使用整数 ID 是不够的。使用 GUID 作为 ID 会提供足够的“随机性”吗?我可以可靠地假设用户永远无法手动输入“GetResource.aspx?guid={猜测的 guid}”并期望访问有效的资源,包括使用脚本时每秒进行多次随机猜测?

或者,是否没有其他替代方法可以从 Session 变量确定用户的 ID,确定他确实有权访问所请求的资源,然后才返回它(当我写这篇文章时,我越来越确信是案例!)。

谢谢

最佳答案

除了对用户进行身份验证并查看他们是否有权访问资源之外,当然没有其他方法可以替代。您在这里提出的是一种方法,使用户更难找到他们无权查看的文档的有效 ID(无论是错误的还是故意的)。

GUID 当然足够大,在实践中您永远不会获得“意外”的有效 ID。这使得未经授权的 GUID 可以检查一个系统,只要没有人主动尝试破坏它,该系统就可以正常工作。另一方面,授权检查是一个即使在活跃攻击者存在的情况下也能很好地工作的系统(当然这取决于攻击者能够做什么)。

您应该根据应用程序的性质在两种方法之间进行选择(它是公开的吗?用户是否已知并对其行为负责?“安全漏洞”会有多严重?)。

关于asp.net - 通过 URL 传递 GUID 的安全风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15001159/

相关文章:

asp.net - 图标未显示

c# - 使用 ASP.net 凭据从 WinForms 应用程序登录

java - antisamy 解析器强制关闭标记

java - 如何向类中添加方法,其中方法名称基于 AspectJ 中现有的带注释的方法?

c++ - 使用 sscanf 将字符串转换为 GUID

javascript - 为传入数据数组生成唯一的 div

c# - Web 应用程序配置设置 - 最佳实践

asp.net - 空白 Asp.net MVC 模板

azure - 如何在不存储凭据的情况下连接到 KeyVault?

language-agnostic - GUID 是否 100% 都是唯一的?