kstm-su / ictsc_2019_yrfw_pre2

0 stars 0 forks source link

すごく匿名ダイヤリー #6

Closed yoidea closed 4 years ago

yoidea commented 4 years ago

匿名で日記が投稿できるサービス「すごく匿名ダイヤリー」を運営しています。 従来、フロントエンドとバックエンドを同じドメインで運用していましたが、 構成変更のため、バックエンドをサブドメインに変更する作業を行っています。

変更前: https://old-diary.ictsc.net/ https://old-diary.ictsc.net/api/

変更後: https://new-diary.ictsc.net/ https://api.new-diary.ictsc.net/

※VNCサーバのWebブラウザからのみ閲覧可能です

ソースコード内のドメインやパスは適切に書き換えましたが、何故か正常に動作しません。 変更前と同じように各機能が動作するよう、サーバにログインして原因調査 及び 修正を行ってください。

なお、サービスはメンテナンス中で限定公開としているため、対応中にサービス断が生じても問題ありません。 また、投稿データについてもバックアップから復元するので、(変更前/変更後環境共に)日記の追加・削除・スター追加は任意に実施して問題ありません。

今後の運用・開発を考慮し、変更は問題解決に必要な箇所に絞り、出来るだけ他に影響を与えないように直してください。 全てを直しきれない場合でも、可能なところまで直してください。

サービス仕様

誰でも匿名で日記が投稿・閲覧できる
投稿されている日記に対して誰でもスターを付けることができる
日記は投稿したブラウザで閲覧すると削除ボタンが表示され、削除が可能 (期間/個数に制限あり)
フロントエンドはSPA(Single Page Application)として構築されている
日記の取得/投稿/削除/スター追加はWebAPI経由でバックエンドと通信して実現する

解答方法

修正 と 報告 の両方が必要です
「変更後」のURLでサービスが正常に動作するよう、実際にサーバ上で修正を行ってください。
解答から「原因と実施した修正内容」を報告してください。
    報告は最終的に行った内容のみで問題ありません (途中の試行錯誤は記載不要)
    具体的に記載してください (例: XXXを直した、ではなく XXXがXXXなので、XXXファイルのXXX部分にXXXXXXXXXを追加した 等)

ログイン情報

VNCサーバから $ ssh 192.168.0.80 -l admin → PW: USerPw@19

※ $ sudo su - にて rootユーザに昇格可能です

yoidea commented 4 years ago

フロントエンド:/var/www/new-front バックエンド:/var/www/new-api

yoidea commented 4 years ago

原因はCSPによる読み込みブロックだと思われる。 CSPを変更してapi.new-diary.ictsc.netからの読み込みを許可するといいと思う。

Content-Security-Policy: connect-src 'self' api.new-diary.ictsc.net;

/var/www/new-front/index.htmlのMETAタグ

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;">

を以下のように変更

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self' api.new-diary.ictsc.net; script-src 'self' 'unsafe-eval'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;">

CPSのエラーは消えた。

yoidea commented 4 years ago

次はCORSの問題が発生したため、/var/www/new-api/public/index.phpに以下を追加した。

header('Access-Control-Allow-Origin: https://new-diary.ictsc.net');
yoidea commented 4 years ago

まず、VNCサーバのWebブラウザからnew-diary.ictsc.netにアクセスしたところ、CSPによるエラーが発生しました。そこで、サブドメイン化により別ドメイン扱いであるAPIへの通信を許可するために、/var/www/new-front/index.htmlを編集し、MATAタグ内に以下を 追記し、api.new-diary.ictsc.netへの通信を許可しました。

Content-Security-Policy: connect-src 'self' api.new-diary.ictsc.net;

その後、VNCサーバのWebブラウザからnew-diary.ictsc.netにアクセスしたところ、CORSによるエラーが発生しました。そこで、別オリジンであるnew-diary.ictsc.newからのアクセスを許可するように/var/www/new-api/public/index.phpを編集し、以下のようなHTTPヘッダを追加するように変更しました。

header('Access-Control-Allow-Origin: https://new-diary.ictsc.net');

VNCサーバのWebブラウザから再読み込みしたところ、正しく動作しました。