Javascript 和 CSP - 最佳实践

Eve*_*ert 5 javascript jquery content-security-policy

我想对我的 Web 应用程序使用内容站点保护。如果你还没有听说过它,简而言之:它允许我禁用任何嵌入到我的网络应用程序中的 javascript,帮助防止 XSS。

结果是,我所有的 javascript 代码都必须在外部文件中。

大多数 javascript 'library/framework' 代码已经是,但通常我的页面将包含至少几行 JS 代码,实例化与特定页面相关的组件。

例如,我有一个假设的注册页面。在注册页面的底部,我有以下代码:

var registrationForm = new MyApp.registrationValidator($('.regform'));
registrationForm.init();
Run Code Online (Sandbox Code Playgroud)

这个假想的代码得到了对注册表的引用,可以注册所有的验证码。

现在我必须将此代码移动到外部文件。我可以:

选项 A:为每个页面创建一个小的 .js 文件,该文件只执行特定于该页面的代码。

  • 优点 - 简单且相对较快
  • 缺点 - 这是每个页面的额外 js 文件,我更希望能够将所有 javascript 最小化到一个文件中以减少请求。

选项 B:在 javascript 文件中执行我所有的“实例化代码”。我只会检测页面上是否有任何“.regForm”css 类,并且仅在它们出现在页面上时才实例化我的对象。

  • 优点 - 用于实例化的单一位置。如果页面上的组件具有正确的 css 类,它们将神奇地开始工作。
  • 缺点 - 如果我的应用程序增长很多,将会有很多特定页面可能不需要的初始化代码。

选项 C:给我的<body>标签一个 id 或类,并根据一个大开关执行正确的代码。

  • 优点:仍然可以压缩为单个 .js 文件,我不需要每页一个 .js 文件。
  • 缺点:我想我觉得这有点难看。

总而言之,选项 B 是最好的,如果不是因为我觉得拥有大量初始化代码是个坏主意。

我主要想知道的是,您是否有过这种情况的经验,您是如何解决的?

Chr*_*der 3

选项 D(A 和 B 的变体):看一下部署系统,它将多个 javascript 源文件编译(并缩小)为一个,仅考虑该页面所需的文件。

对于PHP来说,Assetic就是这样一个系统。