Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源

这篇具有很好参考价值的文章主要介绍了Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源,Angular,angular

一:错误出现

这个错误的意思是,拒绝将字符串评估为 JavaScript,因为‘unsafe-eval’不是以下内容安全策略中允许的脚本源。

Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源,Angular,angular

二:错误场景

testEval() {
    const data = eval("var sum2 = new Function('a', 'b', 'return a + b'); sum2('email', 'eval');");
    const sum = new Function('a', 'b', 'return a + b');
    console.log('test eval:', data);
  }

类似的不安全的表达式还有:

  1. eval()
  2. Function() ——When passing a string literal like to methods like: setTimeout("alert(\"Hello World!\");", 500);
  3. setTimeout()
  4. setInterval()
  5. window.setImmediate
  6. window.execScript() (IE < 11 only)

三,错误原因

因为我的安全策略(CSP)白名单中并不包含‘unsafe-eval’这个选项。所以抛出了异常。

不包含‘unsafe-eval’的理由是eval 实际上是不安全的。 它在每种语言中的意思是“获取这个字符串并执行它的代码”。 也就是说eval本质是将字符串转成表达式并执行。容易遭到注入攻击。

四,错误解决

1尽量避免使用eval方法,大多数情况下,eval方法是可以被避免的。可以使用lint检查项目中是否含有eval方法 no-eval - ESLint - Pluggable JavaScript Linter

上述的代码可以这样更改,代码正常工作

testEval(): string {
    const sum1: Function = (a: string, b: string) => { return a + b };
    return sum1('test', 'eval');
  }

Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源,Angular,angular

2如果有时候,必须动态生成方法,这部分工作可以放到服务端完成。而不是把‘unsafe-eval’加入到CSP白名单中。

上述代码还可以这样更改,代码正常工作

testEvalSolutionTwo(): Observable<Object> {
    return this.http.get(this.rootURL + '/test/eval');
  }

Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源,Angular,angular

五,CSP的配置补充

CSP可以在三个地方配置

1:拦截器

import { requestInterceptor } from './http/request.intercepter';
@NgModule({
  .. .. ..
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: requestInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }


import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class requestInterceptor implements HttpInterceptor {
    constructor() {}

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      req.headers.append('Content-security-policy', `script-src 'self';`);
      return next.handle(req);
    }
}

2:html文件

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; child-src 'none';">

3:server端(推荐)

app.use(function (req, res, next) {
  res.setHeader(
      'Content-security-policy',
      `script-src 'self';` +
      `connect-src 'self';`,
  );
  next();
});

CSP文档参见:CSP: script-src - HTTP | MDN文章来源地址https://www.toymoban.com/news/detail-654457.html

到了这里,关于Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Angular 异常 NG0904: unsafe value used in a resource URL context

    问题描述 主要是用变量对iframe页面的参数进行赋值时报错,直接使用字符串不会报错、 故障原因 -因为在iframe中执行angular不信任的操作,需要使用angular提供的DomSanitizer 解决办法 使用Angular提供的DomSanitizer 创建一个Pipe 声明Pipe 使用pipe 参考链接 1.Unsafe value used in a resource URL

    2024年02月13日
    浏览(31)
  • Angular 与PDF之二:打印预览的实现

    如何在angular中实现打印和预览pdf的功能, 使用print.js这个包就可实现这个功能 Print.js介绍 Print.js可以打印pdf文件,html元素,图片。官网 https://printjs.crabbly.com/ Print.js使用 首先新建一个angular项目,在项目里下载print.js npm install print-js –save 下载好了之后在组件里引入它 先来试试

    2024年02月15日
    浏览(27)
  • 开发安全之:Dangerous Function: Unsafe Regular Expression

    Overview 无法安全地使用函数 split()。不应该使用此函数。 Details 某些函数不论如何使用都有危险性。这一类函数通常是在没有考虑安全问题的情况下就执行了。 在这种情况下,您正在使用的危险函数为 dingdan_pc_list.php 的第 65 行中的 split()。 split() 函数不安全,因为它是已弃用

    2024年01月18日
    浏览(23)
  • vs如何运行不安全的代码/不安全代码只会在使用 /unsafe 编译的情况下出现

    🔑 作者:@哈桑c(CSDN平台) 🐛 专栏:Bug解决记录 Visual Studio 报错: CS0227: 不安全代码只会在使用 /unsafe 编译的情况下出现。 在 Visual Studio 中右击报错的项目选择属性,找到生成里面的 允许使用“unsafe\\\"编译的代码 ,勾选即可。 图示步骤: 完成上述步骤之后,就可

    2024年02月12日
    浏览(38)
  • ERR_UNSAFE_PORT浏览器安全问题导致无法访问的解决方案

    配置好web的https协议的服务器后,使用浏览器访问服务器的时候出现ERR_UNSAFE_PORT无法访问,如下图提示。 img src=“https://juejin.cn/ “点击并拖拽以移动”” style=“margin: auto” / 经过抓取报文分析,并没有抓到访问服务器的报文,定位发现是浏览器的保护机制自动拦截了请求,和

    2024年02月03日
    浏览(78)
  • 使用net/http/pprof时,发现6000端口是Chrome限制的非安全端口,报错ERR_UNSAFE_PORT

    最近在go项目中,涉及到性能分析,使用了go自有的net/http/pprof包,设置了6000端口后,发现浏览器打不开。PC上只有Edge和Chrome两个浏览器,刚好都是chrome内核。排查了系统问题、端口占用问题后,一直卡在这里-_- 后面发现浏览器报错了ERR_UNSAFE_PORT。才知道浏览器为了安全问题

    2024年02月07日
    浏览(32)
  • 5.2 IPSec之二----安全协议

    1、安全协议 认证头AH协议只提供认证服务 封装安全荷载协议ESP提供认证和加密两种服务 认证服务是可选的,加密服务必须实现   2、认证头协议AH 传输模式的AH进行认证的范围是除了IP头部的可变部分之外的整个IP数据包 隧道模式的AH对整个内部IP包及其外部IP包头部的不变部

    2024年02月07日
    浏览(30)
  • scanf函数不安全: C4996 ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead

    代码报错: scanf函数易受缓冲区溢出攻击的影响,可能导致安全问题。 scanf_s函数是一种更安全的选择,它将缓冲区的大小作为参数并避免了缓冲区溢出攻击 举个栗子: 字符数组的大小为 5 , 若输入的字符串字符数目不超过 5 ,那么没问题, ( 注意字符串后面默认会多出来一个 ‘

    2024年02月03日
    浏览(38)
  • 汽车电子功能安全FuSa之二:L3级以上故障运行及安全机制

    MS可能很适合有效地评估ADS可能经历的各种潜在的失效模式,以及它可能失效的各种初始条件。 一些故障模式的常见根源,包括噪音和延迟,可以被建模用于虚拟测试。 故障注入和故障分析可以在虚拟环境中安全进行,但在封闭道路或开放道路测试中使用真实系统时,它们会

    2024年02月02日
    浏览(35)
  • 安全多方计算之二:一文搞懂百万富翁问题

    两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方及其他第三方知道自己财富的任何信息,这是由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《Protocols for secure computations》中提出的姚氏百万富翁问题,开创了密码学研究的新领域:安全

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包