@パパリウス さま
解説ありがとうございます。
パッケージリリースは申し訳ありませんが来週14日を目処に行いたいと思います。
(ちょっとまとまった時間が作れないもので...)
baseに適していると思われる機能についてはplusリリース前にソースコードを間違いなくお渡しします。
(plusのソースコードも当然ながら全部お渡しします)
さて、昨日詳細を書くと言ったクロスサイトスクリプティングについて解説します。
・WebUI(ympd)の簡単な動作解説
WebUIでは各ユーザのブラウザ上でJavaScriptを動かすことにより楽曲の取得・表示・再生制御などいろいろな機能を実現しておりますが、
最初にこのUIを構築するための各パーツはRaspberryPi上のympd実行ファイル内に格納されているhtml・css・JavaScriptソースコート・画像ファイル・フォントファイルになります。
これを利用者のWebブラウザへまず送って、ブラウザ上で展開・解析して実行しています。
・クロスサイトスクリプティングとその対策
JavaScriptはかなり強力なプログラム実行環境であり、
URLさえ指定すれば、Webブラウザの利用者が意図しないサイトに勝手に問い合わせが可能になります。
本来のWebサービスを提供するサイト上で「JavaScriptのソースコードを攻撃者が別のサイトに誘導するように書き換えすることが出来ると非常にマズイ」というわけです。
(そのように誘導されても利用者は全くわからないように偽装も可能)
これをクロスサイトスクリプティング(サイト間をまたいだスクリプト実行)といいます。
そこで、近代的なWebブラウザの標準設定では「最初にパーツ提供されたサイト以外にJavaScriptでパーツ取得をするためには専用の方法を使わないとダメ」というルールになっています。
・今回の「TEST」ボタンの実装について
利用者のWebブラウザ〜NAS上のHTTPサーバ間で直接カバーアートを取得という行為は、HTML上のプロパティで取得する分はルールにあまり抵触しませんが、
「TEST」ボタンをおしてJavaScriptでHTTPプロトコルを実行して直接取得(本当はURLの存在確認のためヘッダ取得のみ)するのは上記のルールに抵触するので動作しませんでした。
そこで、視覚的にもカバーアートが見えれば面白いと思い、直接URL指定した別ウィンドウを表示させる方法としています。
・対策方法
どうしてもTESTボタンでJavaScript経由でURLを取得する場合は以下の方法がありますが、
どれも利用者に設定の負担をかけたり、セキュリティの設定を変更するため採用しませんでした。
1)NASのHTTPサーバ側に「外部のどこからアクセスが来てもOK」というヘッダーを出力するように設定する
2)利用者のWebブラウザでクロスサイトスクリプティングを許可するように設定を入れる
3)利用者のWebブラウザで実行しているJavaScript内のコールバック関数に対して値を戻す(JSON形式のファイルのみ対応であること、HTTPサーバ側にCGI等のスクリプトを置く必要がある)