我想在任何“篡改”查询字符串的情况下添加查询字符串“检查”和日志记录。给定页面上的 Page_Init 事件是在 ASP.Net 页面生命周期中执行此操作的正确位置吗?
2 回答
我的一般规则是尽早做所有事情。只要查询字符串验证不依赖于页面,这甚至可能包括早在 Application.BeginRequest (甚至可能在页面加载之前发生的事件)时进行检查。
这里的问题是“你认为什么是篡改?” 无效的密钥?无效值?尝试对可能作为 XSS 攻击的一部分写入结果页面的标签进行编码?
如果不了解您要完成的工作,很难给出任何具体的建议。
编辑:要访问应用程序事件,请从“添加新项目”选项将全局应用程序类添加到您的项目中。
每个请求都会触发应用程序生命周期,而页面生命周期只是其中的一个子流程,而请求处理程序恰好是一个 aspx 文件。
EDIT2:清理查询字符串数据完全取决于您使用数据的目的。查询字符串数据的一些潜在危险用途包括:
- SQL 命令的值:使用“参数化查询”可以在很大程度上减轻 SQL 注入。
- 文件位置:如果服务器上的 NTFS 权限松懈,这可用于使服务器咳出硬盘上的任何文件。
- 写入 HTML 响应的值:用户可以对标签进行编码并执行一些 JavaScript。请务必使用 Server.Encode() 或手动清理字符串。
ID 值:如果您使用查询字符串来存储 ID 值,用户可以用其他人替换这些值,以尝试访问有关他们不应该看到的事物的信息,例如:
用户做出有根据的猜测并将其更改为:
http://domain.com/somepage.aspx?userid=0
这可能会调出管理员用户。
我们在项目中遵循的使用加密和解密查询字符串。我可以向您发送该课程以进行加密和解密功能。但作为参考,如果有帮助,您可以从以下 URL 开始。
http://geekswithblogs.net/casualjim/articles/64639.aspx
现在在这如果它被锤炼,它就无法被解密。您可以为其编写页面级异常并重定向到正确的错误页面。
如果您需要有关任何特定点的更多信息,请告诉我。
干杯!!!