[英]Catching Content Security Policy (CSP) errors
我正在使用此方法來檢測帶有eval
CSP(也用於AngularJS):
function noUnsafeEval() {
try {
new Function('');
return false;
} catch (err) {
return true;
}
}
但是我沒有配備CSP的服務器來徹底測試它。
它可靠嗎? 代碼中是否存在new Function('')
行會導致無法捕獲的錯誤?
什么是err
? 在那里捕獲了哪種錯誤( Error
, TypeError
等)? CSP錯誤的消息是什么意思?
我在CSP中找不到有關運行時錯誤的文檔。
關於如何檢測CSP,還有另一個stackoverflow問題: 如何檢測內容安全策略(CSP) ,它還顯示了您的功能。
使用它應該是安全的,因為只要代碼到達函數構造函數(即它之前沒有被其他限制阻塞),您將總是從noUnsafeEval獲取返回值。
據我所知,如果CSP不允許不安全的eval,它將拋出一個EvalError( mozilla )。 但這可能因瀏覽器而異。
最好的方法是測試這個。 您可以使用http://mockbin.org創建一個HTTP端點,該端點返回具有正確CSP標頭和您的功能的頁面。 我在這里制作了這樣一個箱子: http : //mockbin.org/bin/cc6029e5-8aac-4a54-8fd1-abf41e17042a 。 如果你打開它,打開開發控制台並調試代碼,你會看到異常:
您還可以在W3C建議/草案中找到此信息: CSP 1.1 , CSP 2 , CSP 3 。 在1.1中,您將獲得SecurityError而不是EvalError。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.