我构建的许多应用程序中有多个位置,其中页面接受以下格式的查询字符串:http://localhost/MySite.aspx?ID=ab1cbabe-42e2-4d15-ab11 -17534b829381
然后,这些页面将获取查询字符串,尝试解析它并使用具有强类型值的数据库调用来显示与 guid 匹配的数据。
示例:
Guid value;
if (Guid.TryParse(Request.QueryString["ID"], out value))
{
SomeControl.Datasource = DatabaseCall(value);
SomeControl.Databind();
}
这显然意味着任何用户(只要他们有数据的 GUID)都可以在技术上访问任何其他用户的数据。显然预测指南几乎是不可能的,但我仍然对此感到不安。
其他人都是如何处理这个问题的?有“正确”的方法吗?还值得担心吗?
最佳答案
在各种情况下,这绝对值得担心。
- 人们倾向于在不删除查询字符串的情况下发布或通过电子邮件发送 URI
- 大多数浏览器都会将整个 URI(包括查询字符串)存储在历史记录中
- 大多数浏览器甚至在地址栏中提供自动完成功能,让您可以尝试已访问过的资源
- http 请求几乎可以在从客户端到服务器的任何地方被拦截,从而暴露查询字符串
我推荐某种基于用户的身份验证机制,例如 asp.net 的成员(member)资格提供程序。
如果您已经在使用某种身份验证,则将资源 guid 链接到关联表中各自的用户 ID 可能会成功。
关于c# - 指南、查询字符串和身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981706/