私はdocument-start
で動作するTampermonkeyのuserscriptを持っています。
インラインJavaScriptが無効になっているかどうかを確認するにはどうすればよいですか?インラインJavaScriptが無効になっているかどうかを確認する方法(Tampermonkeyで)
答えて
これは、インラインJSをブロックする特定の(ほとんどの)方法が問題である:(a)unsafeWindow
opsをブロックせず、そして、(b)Tampermonkeyスクリプトのtry ... catch
ブロックによってキャッチされない例外をスローする。
したがって、次の作品が、インラインJSが無効になっている場合は、次のようなエラーが表示されます。「スクリプト-SRC「安全ではない-EVAL:それは、次のコンテンツセキュリティポリシーの指示に違反しているため
がインラインスクリプトを実行するために拒否'*'。インライン実行を有効にするには、 'unsafe-inline'キーワード、ハッシュ( 'sha256-6BrJXtaiqFeKY4qCquiR3JgWK2KweFWHCvhZWr4tkxA =')、またはnonce( 'nonce -...')が必要です。
コンソールにあります。このようなエラーは面倒ですが、Tampermonkeyのスクリプトを停止しません。
ワーキングデモコード:
// ==UserScript==
// @name Test local JS
// @match *://stackoverflow.com/questions/*
// @run-at document-start
// @grant unsafeWindow
// ==/UserScript==
let gbl_InlineJS_Works = true;
try {
unsafeWindow.TM_youAliveCanary = true;
}
catch (zError) {
console.log ("Local JS fails: " + zError);
gbl_InlineJS_Works = false;
}
if (gbl_InlineJS_Works) {
var tstScript = document.createElement ('script');
tstScript.textContent = "TM_canaryIsAlive = true;";
try {
document.documentElement.appendChild (tstScript);
}
catch (zError) {
console.log ("Local JS fails: " + zError);
gbl_InlineJS_Works = false;
}
if (gbl_InlineJS_Works) {
if (! unsafeWindow.TM_canaryIsAlive) {
gbl_InlineJS_Works = false;
}
}
}
console.log (`Inline javascript ${gbl_InlineJS_Works ? "works!" : "is blocked."}`);
一つの方法は、ページのヘッダにアクセスすることです。あなたはまた、これらのソリューションHow to detect Content Security Policy (CSP)
のいくつかを見ることができるHTTPリクエストAccessing the web page's HTTP Headers in JavaScript
を発行しなければならないことを行うには - 更新1
する。これは基本的にテストされていません。私はfacebook.comに対してこれを実行しました
function inlineScriptEnabled() {
let req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
let header = req.getResponseHeader('content-security-policy');
if (!header)
return true;
let regex = /(^|\s)'unsafe-inline'(;|\s|$)/i;
return !!header.match(regex);
}
console.log(inlineScriptEnabled());
また、ここで説明するようにドキュメントにメタタグを検索する必要があります。 https://developers.google.com/web/fundamentals/security/csp/#the_meta_tagロジックは似ています。
ページのHTTPヘッダーを介してCSP検出の実際の例を提供できますか?最初のページのソリューションを使用すると、Content-Security-Policyヘッダー(またはX-Content-Security-Policyなどの並べ替えの何か)は表示されません。 – Six
サイト自体にCSPヘッダーが設定されているかどうかだけがわかります。 uBlock Origin(Chrome拡張機能)を使用してインラインJavaScriptを '* $ inline-script、domain = stackoverflow.com'のようなフィルタでブロックすると、それは役に立ちません。 – Six
- 1. ボタンが無効になっているかどうかを確認します。
- 2. セッションが無効かどうかを確認する方法
- 3. Swiftジェネリックタイプが無効かどうかを確認する方法?
- 4. クロスドメインリクエストが無効になっているかどうかを確認する方法
- 5. RLMResultsが無効になっていることを確認する方法は?
- 6. sql_safe_updatesがオンになっているかどうかを確認する方法?
- 7. アンドロイドデバイスがオフになっているかどうかを確認する方法
- 8. ExternalInterface.availableを使用して、JavaScriptが有効になっているかどうかを確認できますか?
- 9. スマート逆変換がJavaScriptで有効になっているかどうかを確認するには?
- 10. ネットワークロケーションプロバイダが有効になっているかどうかを確認する方法はありますか?
- 11. デバイス上でブルートゥースが有効になっているかどうかを確認する方法
- 12. bxsliderで自動再生が有効になっているかどうかを確認する方法
- 13. アンドロイドでUSB接続モードが有効になっているかどうかを確認する方法は?
- 14. デバイスでSmartLockが有効になっているかどうかを確認する方法
- 15. カスタムキーボードが設定で有効になっているかどうかを確認する方法
- 16. iOSデバイスでPINコードが有効になっているかどうかを確認する方法
- 17. ビデオが重なっているかどうかを確認する方法
- 18. 非ネイティブアンドロイドアプリ - アプリケーションマネージャでプッシュ通知が無効になっているかどうかを確認します。
- 19. pythonセレンでボタンが無効になっているかどうかを確認します
- 20. Twitterアカウントが無効になっているかどうかを確認しますか?
- 21. JavaSEコマーシャル機能が有効になっているかどうかを確認する方法は?
- 22. NumLockが有効になっているかどうかを確認する方法
- 23. Dark Appearanceが有効になっているかどうかを確認する方法tvOS
- 24. SeAssignPrimaryTokenPrivilegeが有効になっているかどうかを確認する方法?
- 25. レプリケーションが有効になっているかどうかを確認
- 26. ウィジェットが有効になっているかどうかを確認
- 27. ASP.NETセッションが有効になっているかどうかを確認
- 28. リソースファイルがJavascriptでページによってロードされているかどうかを確認する方法
- 29. jqueryを使用してテキストボックスが無効になっているかどうかを確認
- 30. Javascriptが有効になっているかどうかを確認するサーバ側ASP.NET
メッセージを返信するページコンテキストにコードを挿入します。メッセージ( 'postMessage'/customイベント)を受け取らない場合、それは実行されていません。ただし、JavaScriptの一部が無効になっているわけではありません。さまざまな基準に基づいてJavaScriptを選択的に無効にする拡張機能がいくつかあります。あなたはそのタイプが無効になっているか、あるいはすべてのJavaScriptが無効になっているかどうかテストしたいですか? – Makyen
私は特に、ページ上のすべてのインラインJavaScriptが無効になっているかどうか(Tampermonkeyのuserscriptから)を調べることを検討しています。 '* $ inline-script、domain = stackoverflow.com'のようなuBlock Originフィルタを使用します。 Brock Adamsが述べたように、CSP指令 'script-src 'unsafe-eval' *'を使用しているようです。 – Six