ASP.NET MVC中的安全部分页面更新?

时间:2019-01-18 22:05:02

标签: javascript asp.net-mvc xss

我们有一个混合的webforms / asp.net应用程序,它使用jquery从javascript进行了大量的部分页面更新。

我们应用程序javascript中的典型(不安全)模式是响应用户的请求,以使用以下内容重写页面的一部分:

$.ajax({
        type: "GET",
        url: urlVariableHere,
        success: function (data) {
            $("#elementIdHere").html(data); 
        },
        error: function (XMLHttpRequest, ajaxOptions, ex) {
            errorHandlerFunction(XMLHttpRequest);  
        }    

“ urlVariableHere”指向一个MVC控制器方法,该方法返回一个呈现的MVC视图。换句话说,Controller方法返回原始HTML的blob。

此模式不安全,因为调用了JQuery的html()方法,该方法容易受到跨站点脚本攻击的攻击。现在,我们需要该应用程序通过Veracode静态分析,并且这种不安全的模式会重复数百次。

Hooman在他的回答中指出,如果我们调用的Controller方法呈现的View不使用Html.Raw方法,则可以免受XSS攻击。问题是,我们需要通过Veracode静态扫描,并且由于内部原因,我们不能将这些缺陷标记为“已缓解”。由于内部原因,应用程序必须通过缓解为零的静态扫描。

什么是使该应用程序安全的最佳方法(即最省时),并且仍然能够通过javascript进行部分页面更新?现在我只看到三种选择,所有这些都花了很大的力气:

  1. 将每个部分页面的回发更改为整页的回发。
  2. 更改每个ajax调用以获取JSON而不是HTML,然后使用诸如document.createElement(),element.setAttribute(),element.appendChild()等安全方法从JSON安全地创建DOM元素。
  3. 重新编写应用程序以使用javascript框架(Angular,Vue)或库(React)。

我错过了一个更简单的解决方案吗?

1 个答案:

答案 0 :(得分:0)

据我所知,当您从用户那里获得一些输入时,XSS是一个问题,对我来说尚不清楚为什么您不应该信任自己控制器的响应?您正在做的事情非常典型,而且我见过无数的教程(例如c-sharpcorneraspsnippetsdotnetthoughts等)。

此外,ASP.NET MVC View Engine encodes HTML by default。我不确定您如何呈现局部视图,但是除非您使用@Html.Raw,否则您可能会double encode获得结果。

但是,如果要对HTML结果进行编码,则可以转义HTML字符串see this answer