Add custom CSP
by
unarist
2017-03-11 [2017/03/11 19:10:06]
お好みの Content-Security-Policy を追加して、制限を厳しくしてみよう
@@ -7,10 +7,17 @@
* @javascript_url
*/
+/*
+ ポリシーは後から追加することで厳しくはできても、緩くはできない。
+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#Multiple_content_security_policies
+ 既存のmetaタグを削除・変更しても消えないし、リロード後のDOMツリーにmetaタグを残しておかなくとも残る。
+ また、XHRやinnerHTMLでDOMツリーを構築するときも既存のポリシーの影響を受ける。
+
+ 頭にlocation.reload() を挟めば"元の"ポリシーに戻してから処理することはできるが、
+ 余計なリクエストが一つ増えるし、このスクリプトではやらないことにする。手動でどうぞ。
+*/
+
(function() {
- // 後から追加変更することで厳しくはできても、**緩くはできない**
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#Multiple_content_security_policies
- // なので、既存のmetaタグを再利用する意味はない
let csp = doc.createElement("meta");
csp.httpEquiv = "Content-Security-Policy";
csp.content = prompt("Enter policy:", "default-src 'self'") || '';
@@ -22,8 +29,6 @@
xhr.responseType = "document";
xhr.onload = function() {
let doc = xhr.response;
- // documentElementを入れ替えるとmetaタグは消えるが、
- // ポリシーはリセットされないので再設定する甲斐はあまりない
document.replaceChild(doc.documentElement, document.documentElement);
};
xhr.send();
/*
* @title Add custom CSP
* @description お好みの Content-Security-Policy を追加して、制限を厳しくしてみよう
* @include http://*
* @include https://*
* @license MIT License
* @javascript_url
*/
/*
ポリシーは後から追加することで厳しくはできても、緩くはできない。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#Multiple_content_security_policies
既存のmetaタグを削除・変更しても消えないし、リロード後のDOMツリーにmetaタグを残しておかなくとも残る。
また、XHRやinnerHTMLでDOMツリーを構築するときも既存のポリシーの影響を受ける。
頭にlocation.reload() を挟めば"元の"ポリシーに戻してから処理することはできるが、
余計なリクエストが一つ増えるし、このスクリプトではやらないことにする。手動でどうぞ。
*/
(function() {
let csp = doc.createElement("meta");
csp.httpEquiv = "Content-Security-Policy";
csp.content = prompt("Enter policy:", "default-src 'self'") || '';
doc.querySelector('head').appendChild(csp);
// 設定したポリシーを反映するために再読み込み
let xhr = new XMLHttpRequest();
xhr.open("GET", location.href);
xhr.responseType = "document";
xhr.onload = function() {
let doc = xhr.response;
document.replaceChild(doc.documentElement, document.documentElement);
};
xhr.send();
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。