c# - 指南、查询字符串和身份验证

标签 c# asp.net security authentication

我构建的许多应用程序中有多个位置,其中页面接受以下格式的查询字符串: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)都可以在技术上访问任何其他用户的数据。显然预测指南几乎是不可能的,但我仍然对此感到不安。

其他人都是如何处理这个问题的?有“正确”的方法吗?还值得担心吗?

最佳答案

在各种情况下,这绝对值得担心。

  1. 人们倾向于在不删除查询字符串的情况下发布或通过电子邮件发送 URI
  2. 大多数浏览器都会将整个 URI(包括查询字符串)存储在历史记录中
  3. 大多数浏览器甚至在地址栏中提供自动完成功能,让您可以尝试已访问过的资源
  4. http 请求几乎可以在从客户端到服务器的任何地方被拦截,从而暴露查询字符串

我推荐某种基于用户的身份验证机制,例如 asp.net 的成员(member)资格提供程序。

如果您已经在使用某种身份验证,则将资源 guid 链接到关联表中各自的用户 ID 可能会成功。

关于c# - 指南、查询字符串和身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981706/

相关文章:

c# - WPF 用户控件中的自定义属性

c# - 我可以覆盖我无法继承的类的属性吗?

javascript - 复选框列表检查功能

c# - 如何从另一台服务器上的用户界面(网页)调用一台服务器上的 API?

单个路由的ASP.NET Web API自定义IHttpControllerSelector

java - 传输和存储数据的安全方式

java - startActivity 并拦截 intent extras

c# - 很多 catch block ,但它们都具有相同的功能

c# - 在尝试通过“联系我们”表格联系公司时识别发件人电子邮件 ID

javascript - Javascript 函数中的链接点击验证和 PHP?