Angular 中的动态 CSP(内容安全策略)connect-src

2024-02-03

我在 Angulars 项目的元标记内定义了 CSPindex.html file

  <meta http-equiv="Content-Security-Policy"
        content="default-src 'self';
                 connect-src 'self' https://baseurl1/ https://baseurl2/ https://baseurl3/;
                 img-src 'self' data: http://baseurl/;
                 frame-src 'self' blob:;
                 media-src 'self' https://baseurl/;
                 script-src 'self' 'unsafe-inline' 'unsafe-eval' http://baseurl/;
                 style-src 'self' 'unsafe-inline';">

我的问题是,我想再将一个列入白名单connect-src根据用户在应用程序中的选择动态地进行。如何做到这一点,因为index.html是静态页面吗?

该 url 是从 http 服务调用的,该服务连接到标准服务器接口(不同的提供商)。用户可以选择他的提供商,因此 url 会发生变化。没有已知的一组可能的 URL。如果我能以某种方式 CSP 忽略此服务发送的所有请求,那就太好了。


您可以尝试使用 Meta 组件动态更新 CSP。

如下所示,可能会对您有所帮助。

import { Meta } from '@angular/platform-browser';

    let i  = 0;
    let tim = setInterval(() => {

        let tag = this.meta.getTag('http-equiv=Content-Security-Policy');

        if (tag) {

          this.meta.removeTag('http-equiv=Content-Security-Policy');
          let content = tag.getAttribute('content');
          let str = 'connect-src ';
          let index = content.indexOf(str);
          content = content.slice(0, index + str.length) + "https://baseurl22/ https://baseurl23/ https://baseurl34/ " + content.slice(index + str.length);
            this.meta.updateTag({ 'http-equiv': 'Content-Security-Policy', content: content });
        } else {

          this.meta.addTag({ 'http-equiv': 'Content-Security-Policy', content: 'connect-src \'self\' https://baseurl1/ https://baseurl2/ https://baseurl3/;' });
        }

        if (i == 1) clearInterval(tim);
        i++;
    }, 1000);

Demo - https://stackblitz.com/edit/angular-teecck https://stackblitz.com/edit/angular-teecck

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 中的动态 CSP(内容安全策略)connect-src 的相关文章

随机推荐