【问题标题】:Where is the "right" place to check if a querystring has been tampered with?检查查询字符串是否被篡改的“正确”位置在哪里?
【发布时间】:2010-12-05 03:47:49
【问题描述】:

我想在任何“篡改”查询字符串的情况下添加查询字符串“检查”和日志记录。给定页面上的 Page_Init 事件是在 ASP.Net 页面生命周期中执行此操作的正确位置吗?

【问题讨论】:

  • 什么是篡改的例子?
  • 在我的情况下,我将检查特定键值是否为空或超出指定范围。我不仅在考虑检查是否存在恶意篡改,而且还考虑在通过电子邮件发送带有查询字符串参数的链接并期望用户使用它们的过程中,传入的请求是否被修剪或影响。然后,我会通过查看我的事件日志来了解是否可能发生某些事情,并能够对可能出现的问题进行一些研究。

标签: asp.net query-string security tampering


【解决方案1】:

我的一般规则是尽早做所有事情。这甚至可能包括早在 Application.BeginRequest 时进行检查(可能在页面加载之前发生的事件),只要查询字符串验证不依赖于页面。

这里的问题是“您认为什么是篡改?”无效的密钥?无效值?尝试对可能作为 XSS 攻击的一部分写入结果页面的标签进行编码?

如果不了解您要完成的工作,很难给出任何具体的建议。

编辑:要访问应用程序事件,请通过“添加新项目”选项将全局应用程序类添加到您的项目中。

每个请求都会触发application lifecycle,当请求处理程序恰好是一个aspx文件时,页面生命周期只是其中的一个子进程。

EDIT2:清理查询字符串数据完全取决于您使用数据的目的。查询字符串数据的一些潜在危险用途包括:

  • SQL 命令的值:可以通过使用“参数化查询”在很大程度上缓解 SQL 注入。
  • 文件位置:如果服务器上的 NTFS 权限松懈,这可用于使服务器咳出硬盘上的任何文件。
  • 写入 HTML 响应的值:用户可以对标签进行编码并执行一些 JavaScript。请务必使用 Server.Encode() 或手动清理字符串。
  • ID 值:如果您使用查询字符串来存储 ID 值,用户可以用其他人替换这些值以尝试访问有关他们不应该看到的事物的信息,例如可能是:

    http://domain.com/somepage.aspx?userid=1343243

用户做出有根据的猜测并将其更改为:

http://domain.com/somepage.aspx?userid=0

这可能会调出管理员用户。

【讨论】:

  • 您是否有一个链接,其中包含关于查询字符串和使用它们的攻击应该做的建议检查?
  • 另外,我最早知道如何处理对页面的传入请求是在 Page_Init 中。如果代码位于 Application.BeginRequest 中,代码将位于何处?
  • 使用应用程序生命周期信息更新答案。我也不完全明白你的第一个问题在问什么。能改一下吗?
  • 抱歉,我在问,“查询字符串是如何被利用的,我应该在安全方面检查什么?”
  • 这完全取决于你用它们做什么。我会再次更新我的答案。
【解决方案2】:

我们在项目中遵循的使用加密和解密查询字符串。我可以向您发送该课程以进行加密和解密功能。但如果有帮助,您可以从以下 URL 开始作为参考。

http://geekswithblogs.net/casualjim/articles/64639.aspx

现在,如果它被磨炼,它就无法解密。您可以为其编写页面级异常并重定向到正确的错误页面。

如果您需要有关任何特定点的更多信息,请告诉我。

干杯!!!

【讨论】:

  • 我在其他帖子中看到过这一点,它与本主题相关,我将牢记这一点,以便以后围绕查询字符串进行安全工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多