从安全角度来看,我正在寻求有关使用 GUID 的一些建议。我开发了一个 ASP.Net 应用程序。它使用户可以访问一些不在 Web 服务器上的材料,例如文档和照片。这些存储在文件服务器上。我有一个“GetResource.aspx”页面,它获取资源的 ID,使用 System.IO.FileInfo 打开它,将其写入响应流并返回它。
因此,GetResource.aspx?id=123 将返回,例如,用户有权访问的图片。当然,用户可以手动输入 URL 作为 GetResource.aspx?id=456 在这种情况下,具有该 ID 的图片/文档等将被返回,并且可能不是他们有权访问的。
所以显然使用整数 ID 是不够的。使用 GUID 作为 ID 是否会提供足够的“随机性”,我可以可靠地假设用户永远无法手动输入“GetResource.aspx?guid={A guessed guid}”并且期望访问有效资源,包括使用脚本时每秒做出许多随机猜测?
或者,没有什么可以替代从 Session 变量中确定用户的 ID,确定他确实有权访问所请求的资源,然后才返回它(在我写这篇文章时,我越来越相信这种情况! )。
谢谢