Form.method中的CSRF问题(asp.net SPA)

时间:2016-11-30 11:20:35

标签: asp.net csrf csrf-protection fortify

使用HP fortify进行扫描时,我遇到了CSRF问题。

jQuery.fn.downloadContentUsingServerEcho = function (fileName, contentType, contentEncoding, content) {
        //// test
        //$.ajax({
        //    type: 'POST',
        //    url: 'download/' + fileName,
        //    contentType: 'application/json; charset=utf-8',
        //    data: JSON.stringify({ contentType: contentType, contentEncoding: contentEncoding, content: content })
        //});

        var form = document.createElement('form');
        form.id = 'downloadForm';
       form.method = 'post';
        form.target = 'downloadTarget';
        form.action = 'download/' + fileName;

        var data = {
            contentType: contentType,
            contentEncoding: contentEncoding,
            content: content
        };

        for (var propName in data) {
            if (!data.hasOwnProperty(propName)) { continue; }
            var propValue = data[propName];
            var input = document.createElement('textarea');
            input.name = propName;
            input.value = propValue;
            form.appendChild(input);
        }

        document.body.appendChild(form);
        form.submit();

        document.body.removeChild(form);
    };

我正在接受这种形式.method ='post';

感谢您帮助解决此问题。

谢谢,

BK

2 个答案:

答案 0 :(得分:0)

如果您问如何防止CSRF攻击,OWASP会提供一些很好的信息。

OWASP - Cross Site Request Forgery (CSRF)

注意:您也很难阅读代码中要执行的操作,您应该对其进行格式化,以便我们可以看到您要完成的操作。

答案 1 :(得分:0)

我不太明白你的问题是什么。如果HP fortify说您没有使用CSRF令牌来保护您的AJAX呼叫,那么您需要生成令牌并将其传递给服务器。

在ASP.NET中实现Microsoft提供了一个很好的教程:https://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages

要自动将CSRF令牌添加到所有ajax post调用,您只需添加预过滤器即可。 include antiforgerytoken in ajax post ASP.NET MVC

注意:某些框架(如Telerik)要求CSRF令牌位于options.data中,而不仅仅是标题。