内容安全策略报告 - 使用asp页面的uri

时间:2017-03-20 13:10:24

标签: c# asp.net content-security-policy

我在配置文件中添加了以下csp设置:

 <add name="Content-Security-Policy-Report-Only" value=  "
    default-src 'none' ;
    script-src 'self' 'unsafe-inline' 'unsafe-eval'; 
    style-src 'self' 'unsafe-inline' ; 
    img-src 'self' csi.gstatic.com dl.edge-cdn.net data: ;
    frame-src 'self';
    font-src 'self' ; 
    object-src 'self' ;
    connect-src 'self' ;
    media-src 'self';
    report-uri /csp_report.aspx?cspReport=true"  />

所有设置都正常。我也在浏览器控制台中遇到违规行为。我想在csp_report.aspx中报告所有这些违规行为。但是&#34; Request.form&#34;在Page_load事件中为空。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

发送给report-ui的内容是JSON,而不是application/x-www-form-urlencoded。您可以直接从HttpContext.Request.InputStream获取它并对其进行反序列化(可能最简单的方法是使用JSON.NET,因为它最容易控制属性名称等。)。

string requestJson = String.Empty;

context.Request.InputStream.Position = 0;
using (StreamReader requestStreamReader = new StreamReader(context.Request.InputStream))
{
    requestJson = requestStreamReader.ReadToEnd();
}

// TODO: Deserialize from JSON string or log the JSON

另外,我建议在页面(.ashx)上使用处理程序(例如.aspx文件),因为这个用例更自然(返回没有内容的响应和202状态代码会最合适的。)