【问题标题】:How to implement strict CSP for System.Web.UI.HTMLControls HTMLForm?如何为 System.Web.UI.HTMLControls HTMLForm 实现严格的 CSP?
【发布时间】:2021-10-25 21:54:20
【问题描述】:

我在将正确的 CSP 添加到旧版应用程序时遇到了一些问题。

最初,我在修复 HTMLControls 添加的所有内联事件时遇到问题,因为我不希望策略允许这些事件。我设法通过创建自定义 HTMLTextWriter 来处理 Onclick 和 OnChange 事件并使用 element.AddEventListener 将它们绑定到适当的处理程序来解决这个问题。

现在,问题出现在 HTMLForm 似乎收到值为“javascript:return WebForm_OnSubmit();”的 onsubmit 时。

<form method="post" action="./MyPage.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1">
...
</form>

这是由旧版应用中的一些自定义验证器引起的。 我的问题是,自定义 html 文本编写器似乎根本看不到正在编写的表单。唯一可用的部分是表单 ID。

我注意到的事情:

  1. 表单是自动生成的,它被添加到主文件中,并且设计器部分会自动更新。
  2. 后面的代码只有几个属性,用于文化代码信息和样式包的位置,以及将样式的 href 属性设置为样式包位置的方法。

如何从 asp.net WebForms 中删除其他事件处理程序以创建符合 CSP 的应用程序?

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    我无法找到阻止在 C# 中添加内联事件处理程序的方法。

    相反,我使用附加了 nonce 的脚本标签来删除 onsubmit 属性,然后重新添加了一个事件侦听器用于提交,该事件侦听器将在剥离后使用 onsubmit 属性的文本。

    new Function(form1.getAttribute('onsubmit').replace('javascript:', ''));
    form1.removeAttribute('onsubmit');
    form1.addEventListener('submit', submitFunc);
    

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 2019-10-15
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多