0

让我明确一点,我只是在谈论 URL 中可能存在的安全漏洞(而不是在页面上、查询中或其他任何地方)。

问题是我注意到在表单中使用“GET”不会对尖括号进行编码。

C#.Net 在使用时不会原谅 URL 中的尖括号,Request.QueryString因此我被迫使用Request.Unvalidated,但如果 URL 中单独的尖括号存在安全风险(即其他特殊字符,如括号,撇号、引号等正确编码)。

在这个站点上:https ://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet我读到 JavaScript 可以直接从 URL 运行,虽然我从未成功尝试过,但我需要这样做事先确定我是否需要提交按钮(当然,如果我这样做,则不会有那种类型)指向我自己的 Javascript,自己对其进行编码,然后使用 JavaScript 从那里适当地提交表单, 或者如果我只是请求未经验证的数据并继续前进。

通常我只会走我可以保证是最安全的路线,但是强迫我的用户使用javascript只是为了提交一个简单的搜索表单似乎是一种反好的做法。

4

1 回答 1

2

我只是在谈论 URL 中可能存在的安全漏洞(不在页面上、查询中或其他任何地方)

URL 本身不会导致安全漏洞。当您的页面/站点获取用户输入的信息并将其显示在页面上(XSS)或将其放入查询(SQL 注入)等时,可能会出现安全问题。

RequestValidation 旨在保护您免于获取危险的查询字符串并将其显示在您的网站上。例如,如果查询字符串是?searchterm=<script>alert('XSS!');</script>并且您的代码类似于:

SearchTermLabel.Text = "You searched for " + Request["searchterm"];

用户的搜索字符串将呈现到页面并作为脚本运行。

现在,关于您是否要禁用 RequestValidation.. 合法搜索查询是否可以包含<触发 RequestValidation 的字符或其他任何内容?如果是这样,您需要禁用 RequestValidation 或使用Unvalidated并手动验证/清理搜索字符串。否则,RequestValidation 一般只会被某人调皮触发,而就个人而言,只要他们不会引起安全问题,我不太担心他们的用户体验。如果您想采用该路线,还有一些方法可以捕获 HttpRequestValidationException 并显示一个有吸引力的错误页面。

于 2013-06-28T18:27:43.087 回答