我想创建一个创建侧边栏的浏览器扩展.Chrome没有一流的侧边栏,因此我们必须在页面中添加iframe.但是,由于内容安全策略,这会在许多页面上中断.例如,GitHub使用CSP,它不允许嵌入来自其他站点的iframe.例如,如果您尝试将capitalone.com网站放在GitHub上的iframe中,您将获得以下内容:
拒绝构建" https://www.capitalone.com/ ",因为它违反了以下内容安全策略指令:"frame-src'self'recrera.githubusercontent.com www.youtube.com assets.braintreegateway.com".
这是一个简单的浏览器扩展,可以重现:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status === 'complete') {
chrome.tabs.executeScript(tabId, { code: 'document.body.innerHTML=\'<iframe style=\"width:600px; height:600px\" src=\"https://www.capitalone.com/\"></iframe>\' + document.body.innerHTML;' }, function() {
console.log('Iframe injection complete');
})
}
}.bind(this));
Run Code Online (Sandbox Code Playgroud)
然而,根据维基百科,尽管有任何内容安全策略,浏览器扩展应该能够注入iframe:
根据CSP处理模型,[20] CSP不应干扰用户安装的浏览器加载项或扩展的操作.CSP的这一功能有效地允许任何附加组件或扩展程序将脚本注入网站,无论该脚本的来源如何,因此可以免除CSP策略.
除了我正在做的事情之外,还有其他方法可以注入iframe吗?
我在Firefox上的JS控制台中遇到了一个新错误,我没有更改代码.我没有在其他浏览器中得到此错误,似乎不会影响我的代码的功能.它显然在某种程度上与Firefox相关,但它似乎将错误指向我的异步加载的Facebook JS SDK.
现在使用该SDK的其他人在Firefox中看到了这个吗?任何帮助或见解?这是完整的消息:内容安全策略:无法解析无效的源chrome-extension:// lifbcibllhkdhoafpjfnlhfpfgnpldfl
这是fb JS SDK中的一行:
*/__d("JSON3",[],function(a,b,c,d,e,f){(function(){var g={}.toString,h,i,j,k=e.exports={},l='{"A":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}',m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ba=new Date(-3509827334573292),ca,da,ea;try{ba=ba.getUTCFullYear()==-109252&&ba.getUTCMonth()===0&&ba.getUTCDate()==1&&ba.getUTCHours()==10&&ba.getUTCMinutes()==37&&ba.getUTCSeconds()==6&&ba.getUTCMilliseconds()==708;}catch(fa){}if(!ba){ca=Math.floor;da=[0,31,59,90,120,151,181,212,243,273,304,334];ea=function(ga,ha){return da[ha]+365*(ga-1970)+ca((ga-1969+(ha=+(ha>1)))/4)-ca((ga-1901+ha)/100)+ca((ga-1601+ha)/400);};}if(typeof JSON=="object"&&JSON){k.stringify=JSON.stringify;k.parse=JSON.parse;}if((m=typeof k.stringify=="function"&&!ea)){(ba=function(){return 1;}).toJSON=ba;try{m=k.stringify(0)==="0"&&k.stringify(new Number())==="0"&&k.stringify(new String())=='""'&&k.stringify(g)===j&&k.stringify(j)===j&&k.stringify()===j&&k.stringify(ba)==="1"&&k.stringify([ba])=="[1]"&&k.stringify([j])=="[null]"&&k.stringify(null)=="null"&&k.stringify([j,g,null])=="[null,null,null]"&&k.stringify({result:[ba,true,false,null,"\0\b\n\f\r\t"]})==l&&k.stringify(null,ba)==="1"&&k.stringify([1,2],null,1)=="[\n 1,\n 2\n]"&&k.stringify(new Date(-8.64e+15))=='"-271821-04-20T00:00:00.000Z"'&&k.stringify(new Date(8.64e+15))=='"+275760-09-13T00:00:00.000Z"'&&k.stringify(new Date(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&k.stringify(new Date(-1))=='"1969-12-31T23:59:59.999Z"';}catch(fa){m=false;}}if(typeof k.parse=="function")try{if(k.parse("0")===0&&!k.parse(false)){ba=k.parse(l);if((r=ba.A.length==5&&ba.A[0]==1)){try{r=!k.parse('"\t"');}catch(fa){}if(r)try{r=k.parse("01")!=1;}catch(fa){}}}}catch(fa){r=false;}ba=l=null;if(!m||!r){if(!(h={}.hasOwnProperty))h=function(ga){var ha={},ia;if((ha.__proto__=null,ha.__proto__={toString:1},ha).toString!=g){h=function(ja){var ka=this.__proto__,la=ja in (this.__proto__=null,this);this.__proto__=ka;return la;};}else{ia=ha.constructor;h=function(ja){var ka=(this.constructor||ia).prototype;return ja in this&&!(ja in ka&&this[ja]===ka[ja]);};}ha=null;return h.call(this,ga);};i=function(ga,ha){var ia=0,ja,ka,la,ma;(ja=function(){this.valueOf=0;}).prototype.valueOf=0;ka=new ja();for(la in ka)if(h.call(ka,la))ia++;ja=ka=null;if(!ia){ka=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"];ma=function(na,oa){var pa=g.call(na)=="[object Function]",qa,ra;for(qa in na)if(!(pa&&qa=="prototype")&&h.call(na,qa))oa(qa);for(ra=ka.length;qa=ka[--ra];h.call(na,qa)&&oa(qa));};}else if(ia==2){ma=function(na,oa){var pa={},qa=g.call(na)=="[object Function]",ra;for(ra in na)if(!(qa&&ra=="prototype")&&!h.call(pa,ra)&&(pa[ra]=1)&&h.call(na,ra))oa(ra);};}else ma=function(na,oa){var pa=g.call(na)=="[object Function]",qa,ra;for(qa in na)if(!(pa&&qa=="prototype")&&h.call(na,qa)&&!(ra=qa==="constructor"))oa(qa);if(ra||h.call(na,(qa="constructor")))oa(qa);};return ma(ga,ha);};if(!m){n={"\\":"\\\\",'"':'\\"',"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"};o=function(ga,ha){return ("000000"+(ha||0)).slice(-ga);};p=function(ga){var ha='"',ia=0,ja;for(;ja=ga.charAt(ia);ia++)ha+='\\"\b\f\n\r\t'.indexOf(ja)>-1?n[ja]:ja<" "?"\\u00"+o(2,ja.charCodeAt(0).toString(16)):ja;return ha+'"';};q=function(ga,ha,ia,ja,ka,la,ma){var na=ha[ga],oa,pa,qa,ra,sa,ta,ua,va,wa,xa,ya,za,ab,bb,cb;if(typeof na=="object"&&na){oa=g.call(na);if(oa=="[object Date]"&&!h.call(na,"toJSON")){if(na>-1/0&&na<1/0){if(ea){ra=ca(na/86400000);for(pa=ca(ra/365.2425)+1970-1;ea(pa+1,0)<=ra;pa++);for(qa=ca((ra-ea(pa,0))/30.42);ea(pa,qa+1)<=ra;qa++);ra=1+ra-ea(pa,qa);sa=(na%86400000+86400000)%86400000;ta=ca(sa/3600000)%24;ua=ca(sa/60000)%60;va=ca(sa/1000)%60;wa=sa%1000;}else{pa=na.getUTCFullYear();qa=na.getUTCMonth();ra=na.getUTCDate();ta=na.getUTCHours();ua=na.getUTCMinutes();va=na.getUTCSeconds();wa=na.getUTCMilliseconds();}na=(pa<=0||pa>=10000?(pa<0?"-":"+")+o(6,pa<0?-pa:pa):o(4,pa))+"-"+o(2,qa+1)+"-"+o(2,ra)+"T"+o(2,ta)+":"+o(2,ua)+":"+o(2,va)+"."+o(3,wa)+"Z";}else na=null;}else if(typeof na.toJSON=="function"&&((oa!="[object Number]"&&oa!="[object String]"&&oa!="[object Array]")||h.call(na,"toJSON")))na=na.toJSON(ga);}if(ia)na=ia.call(ha,ga,na);if(na===null)return "null";oa=g.call(na);if(oa=="[object Boolean]"){return ""+na;}else if(oa=="[object Number]"){return na>-1/0&&na<1/0?""+na:"null";}else if(oa=="[object String]")return p(na);if(typeof na=="object"){for(ab=ma.length;ab--;)if(ma[ab]===na)throw TypeError();ma.push(na);xa=[];bb=la;la+=ka;if(oa=="[object Array]"){for(za=0,ab=na.length;za<ab;cb||(cb=true),za++){ya=q(za,na,ia,ja,ka,la,ma);xa.push(ya===j?"null":ya);}return …Run Code Online (Sandbox Code Playgroud) 我正在接受Cordova应用程序开发的培训,并且我解决了内容安全策略的问题.
我的应用程序使用Android模拟器运行,但是当我必须执行javascript时,我在NetBeans(输出窗口)中收到一条消息.
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' https://ssl.gstatic.com". (22:35:56:126 | error, security)
at www/index.html:58
Run Code Online (Sandbox Code Playgroud)
我的代码如下.这是我的index.html.我试着理解CSP是如何工作的,我想我理解这个概念,但在这种情况下,我不明白这个问题.第58行是评论.
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' * data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self'; script-src 'self' https://ssl.gstatic.com; media-src *">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>Hello World</title>
<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<body>
<div class="app">
<h1>Apache Cordova</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event …Run Code Online (Sandbox Code Playgroud) 我的Chrome应用有以下清单:
{
"name": ",
"version": "1.0.3",
"manifest_version": 2,
"description": "Chrome Extension for.",
"icons": {
"16": "images/test.png",
"19": "images/test.png",
"256": "images/test.png"
},
"app": {
"background": {
"scripts": [
"background.js"
]
}
},
"sandbox": {
"js": [
"lib/test-api.js"
]
},
"permissions": [
"<all_urls>",
"notifications",
"storage",
"videoCapture"
]
}
Run Code Online (Sandbox Code Playgroud)
我有一个运行的脚本文件eval.我已经阅读了有关CSP和沙盒的内容,但我仍然收到此错误:
拒绝将字符串评估为JavaScript,因为'unsafe-eval'不是以下内容安全策略指令中允许的脚本源:"default-src'self'chrome-extension-resource:".请注意,'script-src'未明确设置,因此'default-src'用作后备.
javascript google-chrome manifest content-security-policy google-chrome-app
我无法使基础Angular2(最终)应用程序与以下限制性CSP一起使用.
default-src 'none';
script-src 'self';
style-src 'self';
font-src 'self';
img-src 'self' data:;
connect-src 'self'
Run Code Online (Sandbox Code Playgroud)
有一个不安全的-EVAL错误lang.js和两个zone.js.你能提供解决方案吗?
我创建了一个GitHub存储库.您也可以按照以下说明操作.
将最后一个Angular CLI与webpack 6.0.8一起使用,并使用下面的说明创建新应用程序.
ng new csp-test
Run Code Online (Sandbox Code Playgroud)
在index.html中插入定义以下限制性内容安全策略的元标记.
<meta
http-equiv="Content-Security-Policy"
content="default-src 'none';script-src 'self';style-src 'self';font-src 'self';img-src 'self' data:;connect-src 'self'">
Run Code Online (Sandbox Code Playgroud)
然后提供申请.
ng serve
Run Code Online (Sandbox Code Playgroud)
访问http:// localhost:4200 /,由于脚本被CSP阻止,因此页面无法加载.
lang.js:335 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 …Run Code Online (Sandbox Code Playgroud) Chrome 18 Dev/Canary刚刚发布,并且content_security_policy在某些扩展的清单中将需要.
我正在尝试让CSP为内联脚本工作,但我不知道我做错了什么或者这是否是Chrome 18错误.
manifest.json的:
{
"name": "CSP Test",
"version": "1.0",
"manifest_version": 2,
"options_page": "test.html",
"content_security_policy": "default-src 'unsafe-inline'"
}
Run Code Online (Sandbox Code Playgroud)
的test.html:
<html><head>
<script type="text/javascript">
alert("hello");
</script>
</head></html>
Run Code Online (Sandbox Code Playgroud)
在Chrome 18中,此解压扩展无法加载,显示错误:
![无法从'[扩展名目录]'加载扩展程序. 'content_security_policy'的值无效.](https://i.stack.imgur.com/xguv2.png)
如果我更改'unsafe-inline'为'self',扩展加载正常,但alert()不起作用,并且选项页面的控制台包含错误:
由于Content-Security-Policy,拒绝执行内联脚本.
在Chrome 16中,使用'unsafe-inline'让扩展程序加载正常并且也能alert()正常工作.但是,在Chrome 16中,替换'unsafe-inline'为'foo'让扩展加载,但当然不会让alert()工作,所以也许Chrome 18比16更严格,但......
是default-src 'unsafe-inline'居然无效,或者这是一个错误?我可以使用什么CSP值来alert()在Chrome 18中工作?
根据下面接受的答案,内联脚本不再适用于Chrome 18中的扩展程序.alert()需要将其放在自己的JavaScript文件中.
google-chrome google-chrome-extension content-security-policy
这是相对于Chrome扩展程序.我正在尝试使用Google Chart API的简单版本
我在我的html文档"popup.html"中有这个代码,它是在Icon上点击时加载的.
<!doctype html>
<html>
<head>
<script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="js/popup.js"></script>
<script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script>
[...]
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
拒绝加载脚本"http://www.google.com/jsapi?key=xxxxxxxxxxx",因为它违反了以下内容安全策略指令:"script-src'sself'chrome-extension-resource:".
我知道它是相对于权限的东西,我试图修改我的Manifest文件,但没有成功:
{
[...]
"manifest_version": 2,
"permissions": ["http://*.google.com/"],
"content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'",
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
javascript google-api google-chrome-extension content-security-policy
我试图在测试站点上使用新的内容安全策略(CSP) HTTP标头.当我将CSP与Modernizr结合使用时,我遇到了CSP违规错误.这是我使用的CSP策略:
Content-Security-Policy: default-src'self'; script-src'self'ajax.googleapis.com ajax.aspnetcdn.com; style-src'self'; img-src'self'; font-src'self'; report-uri /WebResource.axd?cspReport=true
以下是Chrome浏览器控制台中的错误:
Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self'".
Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
window.Modernizr.injectElementWithStyles - modernizr-2.7.2.js:134
window.Modernizr.tests.touch - modernizr-2.7.2.js:457(anonymous function)
modernizr-2.7.2.js:949(anonymous function) - modernizr-2.7.2.js:1406
Run Code Online (Sandbox Code Playgroud)
我在Github Modernizr网站上发现了以下解决方法.但是,解决方法是在3月份首次提出并做了一点Google-Fu,我找不到解决此问题的方法或解决方法.
我知道我可以包含unsafe-inline指令,它可以解决这个错误,但这也使得不安全的代码能够运行并且首先取消CSP的使用.有没有人有任何解决方案?
更新 - 什么是CSP
CSP是所有主流浏览器(包括Edge)支持的HTTP头.基本上它是允许浏览器用于呈现页面的白色内容列表.在这里了解更多信息或在此处和此处阅读Mozilla的CSP文档.
更新 - …
内容安全策略指令的MDN页面声明不推荐使用frame-src,应该使用child-src.但是,当我尝试使用child-src时,Firefox 37会出现以下错误消息
Content Security Policy: Couldn't process unknown directive 'child-src' <unknown>
Run Code Online (Sandbox Code Playgroud)
这种明显的缺乏支持没有记录(据我所知),令人沮丧.有没有记录浏览器支持的地方?
目前我正在使用frame-src以及child-src,它似乎有用.不过,我现在想知道两者之间是否存在任何冲突可能性.推测支持child-src的浏览器会忽略frame-src?这有保证吗?
使用内容安全策略时,我尝试使用window.URL.createObjectURL关注Chrome 41(测试版)中的过程,我收到如下错误:
拒绝从'blob:http%3A // localhost%3A7000/f59612b8-c760-43a4-98cd-fe2a44648393'加载插件数据,因为它违反了以下内容安全策略指令:"object-src blob://*"
使用内容安全策略限制object-src或以其他方式default-src可以重现问题(为方便起见使用jQuery),如下所示:
blob = new Blob(
["%PDF-1.\ntrailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>"],
{ type: "application/pdf" })
$("<embed>").attr("src", window.URL.createObjectURL(blob))
.appendTo(document.body)
Run Code Online (Sandbox Code Playgroud)
从规范看来,这应该起作用,就像它一样data://*.我曾尝试也blob,blob:,blob:*,blob:http*,blob:http:*,blob:http://*,但无济于事.
什么工作,但由于明显的原因是不可取的,是object-src *.
有没有人在使用内容安全策略加载blob方面有什么成功?这是上游的问题,还是我忽略了什么?
javascript ×4
firefox ×2
android ×1
angular ×1
angular-cli ×1
blob ×1
cordova ×1
google-api ×1
manifest ×1
modernizr ×1