c# - 如果尖括号是我的 URL 中唯一未编码的特殊字符,那么这本身是否危险?

标签 c# javascript security xss webmatrix

让我明确一下,我只是在谈论 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/

相关文章:

android - 带有自签名证书的 TLS 保护的 TCP 服务器和客户端

c# - Azure网站的项目中不存在目标 “ResolveWebJobFiles”

c# - 列表<T> 或 IList<T>

c# - 在 Visual Studio 中测试/运行具有受限 CPU/RAM 的 C# 应用程序?

javascript - 从 Javascript 访问 HTTP 身份验证信息

mongodb - MongoDB 社区审计的开源解决方案

c# - 带参数的 Dispatcher.BeginInvoke 操作

javascript - 容器外的可选元素溢出 : hidden

javascript - Knex 迁移失败,出现错误 : The query is empty

ASP.net 表单复式输入