Boost
(Boost)
2020 年 5 月 31 日午前 9:25
1
2.5.0.beta4 から 2.5.0.beta5 に更新したところ、テーマ内に設置していた 2 つのスクリプトが実行されなくなりました。ブラウザのコンソールには以下が表示されます:
Content Security Policy: Sivuston asetukset estivät resurssin lataamisen osoitteesta inline ("script-src"). injectGlobalHook.js:1:1760
Content Security Policy: Sivuston asetukset estivät resurssin lataamisen osoitteesta inline ("script-src"). pagewrap.bundle.js:1:1151
編集:同じテーマを使用していない他のサイトでも同様のエラーが発生しているようです。つまり、これはテーマの問題ではないようです。もしかすると、テーマ API が変更されたのでしょうか?このトピックは更新されていないようですが:Using the JS API
基本的には、新しい Discourse アップデートにより CSP(コンテンツセキュリティポリシー)がより厳格になったようです。
これをどうすれば修正できるでしょうか?リリースノートには CSP やテーマの変更に関する記載は見当たりませんでした。
実行したいスクリプトは以下の通りです:
<script type="text/discourse-plugin" version="0.0.1">
api.onPageChange(() => {
checkMainPageLoadFeeds();
});
function checkMainPageLoadFeeds() {
// メインページでのみ読み込む
// Discourse の仕組み上、完全に機能しないようですが、少なくとも問題を引き起こすことはありません...
if(/https?:\/\/[^\/]+\/(categories)?$/.test(window.location.href) ){
// これらのファイルは、このフォーラムと同じサーバー上で動作するボットによって作成されます
if($("#development-info").text() == ""){
$("#development-info").load("/thrive-feed-bot/devforum-and-github");
$("#announcement-contents").load("/thrive-feed-bot/community-announcements");
}
}
$("#development-heading").off("click").on("click", expandTheFeeds);
$("#announcement-heading").off("click").on("click", expandTheFeeds);
}
function expandTheFeeds(){
let target = $("#development-feed").height() == 200 ? 450 : 200;
$('#development-feed').animate({ height: target + "px" });
$('#development-info').animate({ height: (target - 95) + "px" });
$('#announcement-feed').animate({ height: target + "px" });
$('#announcement-contents').animate({ height: (target - 95) + "px" });
}
$( document ).ready(function(){
checkMainPageLoadFeeds();
})
</script>
もう一つのスクリプトは以下の通りです:
<script type="text/discourse-plugin" version="0.0.1">
api.onAppEvent('modal:body-shown', (data) => {
if(data.title){
if(data.title.match(/.*create.*account.*/)){
$(".create-account.fixed-modal .modal-footer").prepend(getEmailSpamCheckMessage(true));
}
} else {
// パスワード忘れの場合かもしれません
let element = $(".fixed-modal .forgot-password-modal")
if(element){
element.append(getEmailSpamCheckMessage(false));
}
}
});
function getEmailSpamCheckMessage(register){
return $.parseHTML("<p class='EmailNoteMessage'>もしメールが届かない場合は " +
(register ? "確認メールの " : "") + "スパムフォルダを確認してください。<br>" +
"また、問題がある場合は <a href='https://discordapp.com/invite/FZxDQ4H'>Discord</a> をご利用ください " + (register ? "登録" : "メール受信") + "についてお問い合わせください。</p>");
}
</script>
以前はメタで投稿したはずですが、その投稿が見つかりません。
j.jaffeux
(Joffrey Jaffeux)
2020 年 5 月 31 日午前 9:53
2
CSP に関するすべてはこちらでご確認いただけます:
This guide explains how to use Content Security Policy (CSP) to mitigate Cross-Site Scripting (XSS) attacks in Discourse. It covers CSP basics, configuration, and best practices.
Required user level: Administrator
Summary
Content Security Policy (CSP) is a crucial security feature in Discourse that helps protect against Cross-Site Scripting (XSS) and other injection attacks. This guide covers the basics of CSP, how it’s implemented in Discourse, and how to c…
Boost
(Boost)
2020 年 5 月 31 日午前 9:58
3
CSP に問題があるとは思いません。デフォルトテーマを使用しているサイト(https://forum.revolutionarygamesstudio.com/)でも同じ 2 つのエラーが発生するためです。つまり、私のスクリプトはそもそも読み込まれようとしていないようです。カスタムテーマを使用しているサイトでは、ページ上部のボックスが空白のままになっています。これらは JavaScript で埋め込まれるものです:https://community.revolutionarygamesstudio.com/
また、管理セクションで CSP をオンオフに切り替えてみましたが、スクリプトの問題は解決しませんでした。ただし、2 つのエラーは消え、retort からのエラー 1 つだけが残りました。
編集:どうやら、<script type="text/discourse-plugin" version="0.0.1"> がまったく読み込まれなくなった何らかの変更があったようです。
編集 2:CSP が有効でホワイトリストに何も追加されていない状態でも、これは動作します:
<script>
console.log('this loaded just fine');
</script>
しかし、これは動作しません:
<script type="text/discourse-plugin" version="0.0.1">
console.log('this loaded just fine');
</script>
j.jaffeux
(Joffrey Jaffeux)
2020 年 5 月 31 日午前 10:05
4
https://community.revolutionarygamesstudio.com/ で retort に関連する JavaScript エラーが発生しています。
_retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188 Uncaught TypeError: Cannot read property 'retort_disabled_categories' of undefined
at _retort-75a57ba39180becb082af07c57df6a5dd4e16efe0dbd24ec6c4e5d903e138efb.js:188
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74640)
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
at require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
at f (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74596)
at _ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74561
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74639)
at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
at require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
at t._prepareInitializer (_application-66bcc4126a5a02dd0d99aed67150087a79a427788cc00feaf5e17bf042b73d75.js:6849)
他のサイトについては、ソースコード内に checkMainPageLoadFeeds が見つからないため、これが読み込まれているか確信が持てません。
ただし、https://community.revolutionarygamesstudio.com/ では確認できます:
このプラグインを使って JavaScript エラーを修正してみてください。
Boost
(Boost)
2020 年 5 月 31 日午前 10:09
5
私も同じ現象を確認しています。前の投稿での更新をご覧ください。"text/discourse-plugin" タイプのスクリプトは実行されませんが、通常の script タグは実行されるようです。
それには気づきました。私は最新の retort バージョンを使用しています:
つまり、このプラグインでエラーが発生していることが、テーマ内で定義されたプラグインの実行を妨げているのでしょうか?
j.jaffeux
(Joffrey Jaffeux)
2020 年 5 月 31 日午前 10:13
6
私は meta 上でテストしたところ、以下が正しく呼び出されていることを確認しました。
<script type="text/discourse-plugin" version="0.1">
</script>
これは公式プラグインではないため、詳しいことは存じ上げません。申し訳ありません。
可能性はあります。そのプラグインを無効化、あるいは削除して、問題が解決するか確認してみてください。
Boost
(Boost)
2020 年 5 月 31 日午前 10:39
7
retort をリストから除外して再構築すると、問題が「解決」されました。お手伝いいただきありがとうございます。一つのプラグインが失敗すると、他のプラグインも失敗する可能性があるとは思いもしませんでした。今後、問題を報告する前に確認するよう心がけます。
retort の新しいバージョンを待つ間、これを解決策としてマークしておきます。
最新の Discourse に関する問題は既に報告されているようです:
@gdpelican New issue found with retort plugin, please look into this…
mcdanlj
(Michael K Johnson)
2020 年 6 月 1 日午後 3:40
8
retort の修正により、この問題は解決したことを確認しました。