让我明确一下,我只是在谈论 URL 中可能存在的安全漏洞(而不是在页面、查询或其他任何地方)。
问题是我注意到使用带有表单的“GET”不会对尖括号进行编码。
C#.Net 在使用 Request.QueryString
时不允许 URL 中包含尖括号,因此,我被迫使用 Request.Unvalidated
,但这可能会创建如果 URL 中的尖括号本身存在安全风险(即其他特殊字符,如括号、撇号、引号等。均已正确编码),则存在安全风险。
在此站点:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet我读到 JavaScript 可以直接从 URL 运行,尽管我从未成功尝试过这一点,但我需要事先确定是否需要提交按钮(当然,如果我这样做,就不会具有该类型)指向我自己的Javascript,自己对其进行编码,然后使用JavaScript从那里适本地提交表单,或者如果我应该只请求未经验证的数据并继续。
通常情况下,我只会采取我能保证最安全的路线,但强制我的用户使用 JavaScript 来提交简单的搜索表单似乎是反良好做法。
最佳答案
I am only talking about possible security breaches in a URL (not on the page, in a query, or anywhere else)
URL 本身不会导致安全漏洞。当您的页面/网站获取用户输入的信息并将其显示在页面上(XSS)或将其放入查询(SQL 注入(inject))等时,可能会出现安全问题。
RequestValidation 旨在保护您免遭危险的查询字符串并将其显示在您的网站上。例如,如果查询字符串为 ?searchterm=<script>alert('XSS!');</script>
并且您的代码与此类似:
SearchTermLabel.Text = "You searched for " + Request["searchterm"];
用户的搜索字符串将呈现到页面并作为脚本运行。
现在,关于是否要禁用 RequestValidation.. 合法的搜索查询是否可以包含 <
字符或其他任何触发 RequestValidation 的内容?如果是这样,您需要禁用 RequestValidation 或使用 Unvalidated
并手动验证/清理搜索字符串。否则,RequestValidation一般只会由有人恶作剧而触发,就我个人而言,只要他们不能造成安全问题,我并不太担心他们的用户体验。如果您想采取该路线,还有一些方法可以捕获 HttpRequestValidationException 并显示有吸引力的错误页面。
关于c# - 如果尖括号是我的 URL 中唯一未编码的特殊字符,那么这本身是否危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370792/