You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Forms MVC中Telerik UI内联脚本执行(规避unsafe-inline)问题

解决Telerik UI内联脚本适配CSP(无需unsafe-inline)

一、利用Telerik官方Nonce支持(推荐方案)

如果你的Telerik UI for ASP.NET AJAX版本为R2 2022或更新,框架已内置nonce适配能力,操作步骤如下:

  1. 生成请求唯一的nonce值,在Global.asax或页面后台代码中执行:
    string nonce = Guid.NewGuid().ToString("N");
    HttpContext.Current.Items["TelerikNonce"] = nonce;
    // 设置CSP头,保留unsafe-eval(Telerik组件依赖该规则)
    HttpContext.Current.Response.Headers.Add("Content-Security-Policy", $"script-src 'self' http://10.78.138.207/BvsPanelNewV1/ 'unsafe-eval' 'nonce-{nonce}'");
    
  2. 在页面的RadScriptManager控件中绑定nonce属性:
    <telerik:RadScriptManager runat="server" ID="RadScriptManager1" Nonce='<%# HttpContext.Current.Items["TelerikNonce"] %>'>
    </telerik:RadScriptManager>
    
  3. 在页面后台触发绑定,让nonce属性生效:
    protected void Page_Load(object sender, EventArgs e)
    {
        RadScriptManager1.DataBind();
    }
    

此方案会让Telerik生成的所有内联脚本自动携带匹配的nonce属性,无需添加unsafe-inline即可通过CSP校验。

二、处理自定义内联脚本

如果页面包含手动编写的内联脚本,需给脚本标签添加对应nonce属性:

<script nonce='<%# HttpContext.Current.Items["TelerikNonce"] %>'>
    // 你的自定义内联脚本逻辑
</script>

三、低版本Telerik的哈希替代方案(局限性高)

若无法升级Telerik版本,可尝试哈希方式,但维护成本较高:

  1. 打开浏览器开发者工具,复制Telerik生成的内联脚本内容
  2. 使用SHA-256/SHA-384/SHA-512算法生成脚本哈希值
  3. 将哈希值添加到CSP头中:
    HttpContext.Current.Response.Headers.Add("Content-Security-Policy", $"script-src 'self' http://10.78.138.207/BvsPanelNewV1/ 'unsafe-eval' 'sha256-xxx...'");
    

⚠️ 注意:Telerik内联脚本内容会随控件配置、版本更新变化,哈希值需同步更新,仅作为临时替代方案。

关键注意事项

  • 必须保留unsafe-eval:Telerik部分组件(如RadGrid客户端模板、动画效果)依赖eval机制,官方文档明确要求保留该规则
  • 校验nonce匹配:通过浏览器开发者工具检查Telerik生成的脚本标签,确认nonce属性与CSP头中的值一致
  • 排查第三方脚本:若仍有CSP报错,需检查是否存在未处理的第三方内联脚本

内容的提问来源于stack exchange,提问作者Talha Wajid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:12:38