最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Uncaught EvalError:Refused to evaluate a string as JavaScript解決

 更新時(shí)間:2023年09月01日 10:23:15   作者:明月幾時(shí)有666  
這篇文章主要為大家介紹了Uncaught EvalError:Refused to evaluate a string as JavaScript解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題發(fā)生

環(huán)境:操作系統(tǒng)win10,瀏覽器Google Chrome 版本 103.0.5060.134(正式版本) (64 位)

我想要通過調(diào)用Function構(gòu)造函數(shù),來創(chuàng)建一個(gè)完成加法功能的函數(shù),代碼如下:

var sum = new Function('a', 'b', 'return a + b');

在瀏覽器控制臺(tái)運(yùn)行,結(jié)果報(bào)錯(cuò)

大概意思是說:拒絕將字符串評(píng)估(解析)為JavaScript代碼,因?yàn)樵谝韵聝?nèi)容安全策略指令中,'unsafe-eval’不是一個(gè)允許的腳本源:

通過Function構(gòu)造 函數(shù),創(chuàng)建一個(gè)功能函數(shù),代碼如下:

function defineGetter(prop, data) {
    return Object.defineProperty(this, prop, {
        get: new Function(`return ${JSON.stringify(data)};`)
    });
}

報(bào)如下錯(cuò)誤:

tools.ts:239 Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'unsafe-inline'".

問題分析

1. 內(nèi)容安全策略

(Content Security Policy,CSP) 是一個(gè)額外的安全層,用于檢測(cè)并削弱某些特定類型的攻擊。

CSP 的主要目標(biāo)是減少跨站腳本(Cross-Site Scripting XSS) 的攻擊 。XSS 攻擊利用了瀏覽器對(duì)于從服務(wù)器所獲取的內(nèi)容的信任。即使有的時(shí)候這些腳本并非來自于它本該來的地方,由于瀏覽器信任其內(nèi)容來源,使得惡意腳本在受害者的瀏覽器中得以運(yùn)行。

2. 配置內(nèi)容安全策略

一個(gè)策略由一系列策略指令所組成,每個(gè)策略指令都描述了一個(gè)特定資源類型以及生效范圍(信任的來源)
<meta> 元素可以用來配置該策略(Http響應(yīng)頭也可以配置)

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

content屬性的內(nèi)容格式:多個(gè)資源類型用英文分號(hào)分隔,類型和來源、多個(gè)來源之間用空格分隔,來源加英文單引號(hào),如下所示

資源類型A ‘來源1’ ‘來源2’ … ; 資源類型A ‘來源1’ ’來源2’…

3.內(nèi)容安全策略指令

default-src,當(dāng)沒有顯示的為資源配置生效范圍,默認(rèn)使用default-src的值作為生效范圍。

例如,沒有配置script-src,其默認(rèn)值就是self

script-src,表示資源類型為腳本文件(以下取值表示不同的來源)

  • self 表示允許腳本來源于當(dāng)前網(wǎng)站(當(dāng)前域名,例如:https://www.xxxx.com/,腳本文件路徑的前綴和所在的html文件一致)
  • unsafe-inline 表示允許腳本來源于<script></script> 標(biāo)簽對(duì)
  • unsafe-eval 表示允許腳本來源于字符串

還有樣式等各種各樣的資源,在文章不是重點(diǎn),感興趣可以通過“資源類型”查看

The ‘unsafe-eval’ source expression controls several script execution methods that create code from strings. If ‘unsafe-eval’ isn’t specified with the script-src directive, the following methods are blocked and won’t have any effect:【 'unsafe-eval’控制幾個(gè)從字符串創(chuàng)建腳本代碼的方法。如果’unsafe-eval’沒有在script-src指令中指定,以下方法將被阻塞,并且不會(huì)產(chǎn)生任何影響:】
eval()
Function()
       When passing a string literal like to methods like: window.setTimeout(“alert(“Hello World!”);”, 500);
setTimeout()
setInterval()
window.setImmediate
window.execScript() Non-Standard (IE < 11 only)

解決方法

簡(jiǎn)單來說,eval()、Function()等函數(shù)會(huì)從字符串中“解析”腳本代碼,必須在內(nèi)容安全策略中添加信任字符串來源的腳本的策略指令,該來源的腳本才可以正常運(yùn)行。

<head>
<meta http-equiv="Content-Security-Policy"
      content="default-src 'self'; script-src 'self' 'unsafe-eval';">
</head>

如果是在開發(fā)谷歌插件可以配置manifest.json里的content_security_policy屬性,添加策略的規(guī)則相同。

如果是在使用eval()函數(shù),或者Function()函數(shù),大概率你是隨意打開了一個(gè)網(wǎng)頁,F(xiàn)12進(jìn)入了控制臺(tái)。但是,別人的網(wǎng)站為了安全,不允許字符串來源的腳本。我嘗試修改別人的網(wǎng)頁,在head元素中添加meta元素,配置內(nèi)容安全策略,無效。這也是可以理解的,如果可以通過在別人的網(wǎng)頁中添加meta元素,配置策略,那就可以隨意攻擊別人的網(wǎng)站了。自己創(chuàng)建一個(gè)html網(wǎng)頁,練習(xí)eval()函數(shù)、Function() 函數(shù)的使用。

另外,也許報(bào)錯(cuò)是"because ‘unsafe-inline’ is not an allowed source",那么只需要把unsafe-inline添加到策略指令script-src中即可

以上就是Uncaught EvalError:Refused to evaluate a string as JavaScript解決的詳細(xì)內(nèi)容,更多關(guān)于Uncaught EvalError解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

靖远县| 江孜县| 临泉县| 长宁区| 永德县| 江油市| 隆化县| 财经| 赣榆县| 江油市| 深圳市| 太仆寺旗| 宣城市| 任丘市| 元谋县| 浮梁县| 阳信县| 沾化县| 容城县| 望谟县| 阜宁县| 金堂县| 闻喜县| 蒙自县| 兰考县| 两当县| 闽清县| 望城县| 惠安县| 呼和浩特市| 虹口区| 溧阳市| 体育| 丹阳市| 彭泽县| 鹿邑县| 霍城县| 南漳县| 孟村| 三江| 双流县|