0

我正在使用 Node JS、Express 和 JQuery 开发我的 Web 应用程序。我是 CSP 的新手。我会进行高效的 JQuery 脚本加载。例如,

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>

<!-- my body -->

<script type="text/javascript" src="app1.js"></script>
<script type="text/javascript" src="app2.js"></script>

</body>
</html> 

在页面加载脚本将同时加载。我只会加载 app1.js,只有在真正需要时才加载 app2.js。为了做到这一点,我使用

$.getScript("app2.js", function( data, textStatus, jqxhr ) {
    console.log( "Load was performed." );
});

在 app1.js JQquery 代码中。服务器端,我使用这样的快递头盔:

app.use(
  helmet({
    contentSecurityPolicy: {
      directives: {
        ...helmet.contentSecurityPolicy.getDefaultDirectives(),
        "script-src": ["'self'", "'sha256-EKNnAokt6R1WHWvGHIxyHhk2P4wziF9bHufSThC21Fc'"],
      },
    },
  })
);
app.use(helmet.crossOriginEmbedderPolicy());
app.use(helmet.crossOriginOpenerPolicy());
app.use(helmet.crossOriginResourcePolicy());
app.use(helmet.dnsPrefetchControl());
app.use(helmet.expectCt());
app.use(helmet.frameguard());
app.use(helmet.hidePoweredBy());
app.use(helmet.hsts());
app.use(helmet.ieNoOpen());
app.use(helmet.noSniff());
app.use(helmet.originAgentCluster());
app.use(helmet.permittedCrossDomainPolicies());
app.use(helmet.referrerPolicy());
app.use(helmet.xssFilter());

所以,有一些观察:这段代码在 Chrome 中运行良好,但在 Firefox 中不起作用。我从 Chrome 控制台错误中获取我的 sha256。获取 sha256 对我来说很复杂。使用script-src": ["'self'", "'unsafe-inline'"] 作品,但我知道它不安全,所以我会避免 unsafe-inline

是否可以在不使用 nonce 或 SHA 的情况下以安全模式加载脚本?如果没有,如何轻松获得 sha 或 nonce?我读过它,但 sha256 似乎总是错的。谢谢

4

0 回答 0