检查查询字符串是否被篡改的“正确”位置在哪里?

时间:2010-12-05 03:47:50

标签: asp.net query-string security tampering

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

2 个答案:

答案 0 :(得分: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

这可能会带来管理员用户。

答案 1 :(得分:0)

我们在项目中遵循的是使用加密和解密查询字符串。我可以发给你那个类加密和解密功能。但是为了参考,如果它有帮助,你可以从以下URL开始。

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

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

如果您需要有关任何特定点的更多信息,请与我们联系。

干杯!!!