- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在将 json 发布到 MVC 操作(例如来自 JQuery 的带有 json 内容的 $.ajax 发布)的情况下,是否有一种方法可以从 MVC 手动调用 XSS 检测,例如从过滤器中调用 XSS 检测?
我们使用的是 MVC 5,并且在捕获 XSS(“检测到可能不安全的输入”)的标准 MVC 机制方面没有任何问题,但是该应用程序的一些部分使用 $.ajax
来发布 JSON( “application/json”内容类型)到 MVC 操作。在这些情况下,我们注意到 XSS 检测不会运行并允许危险的表单输入。
在我们对此处类似问题的调查和研究中,我们发现默认模型绑定(bind)器中的 JsonValueProviderFactory
没有对表单提交或查询字符串输入中存在的此 XSS 安全性进行相同的调用。
虽然在客户端清理输入很容易,但我们显然还需要服务器验证才能抛出 5xx(可能是我可以包装在过滤器中以在可能受到影响的操作之间共享的东西)来强制执行此操作如果可能的话,使用默认模型绑定(bind)对 json 提交的输入进行危险代码检测,以避免重新发明轮子或将 html 编码的错误输入插入我们的数据库。
最佳答案
我找到了适合我情况的解决方案。在这种情况下,我们让 JQuery 使用 $.ajax
将 JSON 发布到 MVC 操作。默认模型 Binder 不验证发布的 JSON,允许针对我们的操作发布不安全的 XSS。
为了解决这个问题,我发现 RequestValidator
有一个静态方法 InvokeIsValidRequestString
允许验证特定的字符串以检测 XSS(因为到目前为止我找到的每个解决方案都重新发明了wheel here 并做了自己的 XSS 检查白/黑名单)。然后只需将操作限制在适当的场景,获取发布的 JSON,并在检测到 XSS 时抛出验证错误。
public class ValidateJsonXssAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext?.Request;
if (request != null && "application/json".Equals(request.ContentType, StringComparison.OrdinalIgnoreCase))
{
if (request.ContentLength > 0 && request.Form.Count == 0) //
{
if (request.InputStream.Position > 0)
request.InputStream.Position = 0; // InputStream has already been read once from "ProcessRequest"
using (var reader = new StreamReader(request.InputStream))
{
var postedContent = reader.ReadToEnd(); // Get posted JSON content
var isValid = RequestValidator.Current.InvokeIsValidRequestString(HttpContext.Current, postedContent,
RequestValidationSource.Form, "postedJson", out var failureIndex); // Invoke XSS validation
if (!isValid) // Not valid, so throw request validation exception
throw new HttpRequestValidationException("Potentially unsafe input detected");
}
}
}
}
}
然后,我可以只装饰相关的 MVC 操作,期望 JSON 发布的数据可能绕过标准的 XSS 预防:
[HttpPost]
[ValidateJsonXss]
public ActionResult PublishRecord(RecordViewModel vm) { ... }
我很幸运地偶然发现了 OWASP .NET 建议,其中建议扩展 RequestValidator 对象,它公开了由 MVC 自动用于查询字符串的其他场景的 ValidateInput
完成的字符串验证,表单集合和 cookie 值。
更多信息:https://www.owasp.org/index.php/ASP.NET_Request_Validation
如果有人有其他建议,我很乐意看到其他方法。
关于c# - 来自 JSON ajax post 的 MVC 操作的 XSS 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846577/
服务器XSS的区别有什么明确的解释和客户端 XSS? 我阅读了 OWASP 网站上的解释,但对我来说不是很清楚。我知道反射、存储的 DOM 类型。 最佳答案 首先,为了让其他人发现问题,我们从 OWA
我在考虑我的应用程序的 XSS 漏洞。在服务器端,我不清理输入或输出,所以 alert(document.cookies) 完全如此存储在数据库中。要在客户端查看此值,我使用 Mustache。如果这
我无法理解存储的 xss 和反射的 xss 之间的区别是什么。你能举个例子告诉我吗? 最佳答案 存储型 XSS 意味着一些 坚持数据(通常存储在数据库中)未在页面中进行清理,这意味着每个人都可能受到该
Cross-site scripting (XSS) is a type of computer security vulnerability typically found in web appli
有人可以用简单的英语解释 XSS 是如何工作的吗?也许举个例子。谷歌搜索没有多大帮助。 最佳答案 跨站点脚本基本上是动态网页的安全漏洞,攻击者可以创建恶意链接将不需要的可执行 JavaScript 注
站点的本地存储值可以被xss(跨站点脚本)覆盖吗?据我在 Chrome 和 Firefox 中验证,一个站点的 localstorage 值不能被其他站点访问。谁能告诉我 localstorage 值
据我了解,我需要在 header 服务器端禁用 X-XSS-Protection,以防止通过 GET 请求发生 XSS。 例如,用户浏览到 http://mysite.com/index.php?pa
在 OWASP XSS prevention cheat sheet它表示无法将不受信任的数据安全地放入 .setinterval JS 函数中。即使被转义/编码,XSS 仍然是可能的。 但如果我有这
我正在创建一个网页,用户可以在其中交互并在远程计算机上执行基本的文件系统操作(创建文件/目录、删除文件/目录、导航文件系统)。 该网页是基本的 HTML(UTF-8 编码)和 Javascript。我
可能是简单的解决方案,但我不明白为什么我尝试通过索引页面上的 XSS 输入在我的欢迎页面上运行此警报脚本不起作用。 我有一个带有表单的简单 index.htm 页面:
好的,所以我一直在阅读关于此处和其他地方的 Markdown ,并且用户输入和数据库之间的步骤通常被给出为 将 markdown 转换为 html 清理 html(带白名单) 插入数据库 但对我来说,
我最近发现 this blog entry在将 XSS 攻击直接写入数据库的工具上。它看起来是一种非常好的方法来扫描应用程序以查找我的应用程序中的弱点。 我尝试在 Mono 上运行它,因为我的开发平台
我正在经历一场无情的 XSS 攻击,但我似乎无法阻止。我的网站上共有三个输入表单 - 一个用于上传图像,一个用于向页面添加评论,第三个用于通过 php 发送电子邮件。我以一种或另一种方式保护它们所有人
我正在寻找有关 Qooxdoo 安全性的信息。 我想检查我的应用程序 vs OWASP top 10 需要审查的一点是 XSS OWASP A3 XSS 我如何确定 Qooxdoo 是安全的,可以抵御
我的网站遭受了多次 XSS 攻击。以下 HTML 片段是攻击者注入(inject)的 XSS 向量: 看起来脚本不应该执行,但是使用 IE9 的开发工具,我能够看到浏览器将 HTML 转换为以
CaSTLe Project 功能丰富,包括一些很棒的子项目,使用它进行开发是一种乐趣。 我的团队几乎准备好交付定制的 EAM我们正在完善我们的系统。我们尝试了一些基本的 XSS 攻击并猜测:它们都有
通过简单地转换以下(“大 5”): & -> & < > -> > " -> " ' -> ' 你会阻止 XSS 攻击吗? 我认为您也需要在字符级别上列入白名
我正在使用 ASP.NET 并且在 ASP.NET 页面上具有用于检查 XSS 验证的验证属性。但是我想知道这真的足够了吗? 我访问了一些关于 stackoverflow 的相关帖子,这对我有帮助,但
我们正在使用 ASP.NET MVC 5.0 来构建一个网站。如果我在保存时输入一些 javascript 文本框,我会得到一个“检测到可能不安全的输入”错误页面 - 太好了。 然而,我们的一些屏幕使
持久性 XSS 和非持久性 XSS 之间的主要区别是什么? 最佳答案 顾名思义,持久型 XSS 和非持久型 XSS 的区别如下。 持久性 XSS 存储在 cookie 或服务器数据库中的 XSS。 聊
我是一名优秀的程序员,十分优秀!