如何为 System.Web.UI.HTMLControls HTMLForm 实施严格的 CSP?

How to implement strict CSP for System.Web.UI.HTMLControls HTMLForm?

我在向遗留应用程序添加适当的 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# 中添加内联事件处理程序的方法。

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

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