回答編集履歴

9

HayatoKamono

HayatoKamono score 2335

2018/03/27 19:12  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
> もちろんこれはSPAに限らずJavascript自体のリスクではあると思いますが、
サーバーサイドレンダリングの場合、JSは「見た目の操作」にのみ使われてることが多いと思います。
SPAではややロジックも担当している印象を受けたためこのような質問をしました。
おっしゃる通り、追記の内容からすると、もはや、spaがどうこうという話ではないと思います。
> ここでユーザーがコンソールから性別データをいじった場合、男性なのに化粧品のアンケートを表示させる、女性なのに化粧品のアンケートを表示させない のようなことが可能になってしまう気がします。
そして、セキュリティーと、もはや関係ない気がします。
> ユーザーからの挙動変更が可能なリスクがある中でどのような策がなされているのか、あるいはなすべきなのか 教えていただきたいです。
クライアント側では諦める、そして、サーバー側で対応。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。クライアントサイドから送られてきたデータをそのままサーバーサイドで信用してはダメです。
> 回答でいただいたコードスプリッティングなどで対応はできそうですが、こんな些細なものごとにいちいち分割しているとは思えません。
そうです。そんな些細なことにコストをかける必要があるかを検討することも大事です。なので、今回の追記であったようなケースならば特に気にしないで良いかと思います。
そうです。そんな些細なことにコストをかける必要があるかを検討することも大事です。なので、今回の追記であったようなケースならば特に気にしないで良いかと思います。
> サーバーサイドレンダリングであればサーバー側でユーザーの性別を見て生成するHTMLを変更できます。
サーバーサイドでユーザーの性別を把握出来るということは、ユーザー登録されていることが前提ですかね。
でもその場合、ユーザー登録時に本当の性別をユーザーが登録してくれているかどうかも不明ですよね。
8

HayatoKamono

HayatoKamono score 2335

2018/03/27 19:08  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
> もちろんこれはSPAに限らずJavascript自体のリスクではあると思いますが、
サーバーサイドレンダリングの場合、JSは「見た目の操作」にのみ使われてることが多いと思います。
SPAではややロジックも担当している印象を受けたためこのような質問をしました。
おっしゃる通り、追記の内容からすると、もはや、spaがどうこうという話ではないと思います。
> ここでユーザーがコンソールから性別データをいじった場合、男性なのに化粧品のアンケートを表示させる、女性なのに化粧品のアンケートを表示させない のようなことが可能になってしまう気がします。
そして、セキュリティーと、もはや関係ない気がします。
> ユーザーからの挙動変更が可能なリスクがある中でどのような策がなされているのか、あるいはなすべきなのか 教えていただきたいです。
クライアント側では諦める、そして、サーバー側で対応。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。クライアントサイドから送られてきたデータをそのままサーバーサイドで信用してはダメです。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。クライアントサイドから送られてきたデータをそのままサーバーサイドで信用してはダメです。
> 回答でいただいたコードスプリッティングなどで対応はできそうですが、こんな些細なものごとにいちいち分割しているとは思えません。
そうです。そんな些細なことにコストをかける必要があるかを検討することも大事です。なので、今回の追記であったようなケースならば特に気にしないで良いかと思います。
7

HayatoKamono

HayatoKamono score 2335

2018/03/27 19:06  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
> もちろんこれはSPAに限らずJavascript自体のリスクではあると思いますが、
サーバーサイドレンダリングの場合、JSは「見た目の操作」にのみ使われてることが多いと思います。
SPAではややロジックも担当している印象を受けたためこのような質問をしました。
おっしゃる通り、追記の内容からすると、もはや、spaがどうこうという話ではないと思います。
> ここでユーザーがコンソールから性別データをいじった場合、男性なのに化粧品のアンケートを表示させる、女性なのに化粧品のアンケートを表示させない のようなことが可能になってしまう気がします。
そして、セキュリティーと、もはや関係ない気がします。
> ユーザーからの挙動変更が可能なリスクがある中でどのような策がなされているのか、あるいはなすべきなのか 教えていただきたいです。
クライアント側では諦める、そして、サーバー側で対応。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。クライアントサイドから送られてきたデータをそのままサーバーサイドで信用してはダメです。
6

HayatoKamono

HayatoKamono score 2335

2018/03/27 19:04  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
> もちろんこれはSPAに限らずJavascript自体のリスクではあると思いますが、
サーバーサイドレンダリングの場合、JSは「見た目の操作」にのみ使われてることが多いと思います。
SPAではややロジックも担当している印象を受けたためこのような質問をしました。
おっしゃる通り、追記の内容からすると、もはや、spaがどうこうという話ではないと思います。
> ここでユーザーがコンソールから性別データをいじった場合、男性なのに化粧品のアンケートを表示させる、女性なのに化粧品のアンケートを表示させない のようなことが可能になってしまう気がします。
> ユーザーからの挙動変更が可能なリスクがある中でどのような策がなされているのか、あるいはなすべきなのか 教えていただきたいです。
クライアント側では諦める、そして、サーバー側で対応。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。
5

HayatoKamono

HayatoKamono score 2335

2018/03/27 19:04  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
> もちろんこれはSPAに限らずJavascript自体のリスクではあると思いますが、
サーバーサイドレンダリングの場合、JSは「見た目の操作」にのみ使われてることが多いと思います。
SPAではややロジックも担当している印象を受けたためこのような質問をしました。
おっしゃる通り、追記の内容からすると、もはや、spaがどうこうという話ではないと思います。
> ここでユーザーがコンソールから性別データをいじった場合、男性なのに化粧品のアンケートを表示させる、女性なのに化粧品のアンケートを表示させない のようなことが可能になってしまう気がします。  
 
そして、セキュリティーとももはや関係がない気がします。  
 
> ユーザーからの挙動変更が可能なリスクがある中でどのような策がなされているのか、あるいはなすべきなのか 教えていただきたいです。
クライアント側では諦める、そして、サーバー側で対応。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。
4

HayatoKamono

HayatoKamono score 2335

2018/03/27 19:02  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
> もちろんこれはSPAに限らずJavascript自体のリスクではあると思いますが、
サーバーサイドレンダリングの場合、JSは「見た目の操作」にのみ使われてることが多いと思います。
SPAではややロジックも担当している印象を受けたためこのような質問をしました。
おっしゃる通り、追記の内容からすると、もはや、spaがどうこうという話ではないと思います。
> ユーザーからの挙動変更が可能なリスクがある中でどのような策がなされているのか、あるいはなすべきなのか 教えていただきたいです。
クライアント側では諦める、そして、サーバー側で対応。
SPAにかぎらず、例えば、通常のフォームであっても、フォームのUIからは選択出来ない選択肢を適当にユーザーが設定してサーバー側に送信することも可能なので、不正値かどうかはサーバー側で対応すべきものだと思います。
3 ;

HayatoKamono

HayatoKamono score 2335

2018/03/27 18:42  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
と、なりますかね。  
 
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
2 https://reactjs.org/docs/code-splitting.html

HayatoKamono

HayatoKamono score 2335

2018/03/27 18:38  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports](https://webpack.js.org/guides/code-splitting/#dynamic-imports))
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports / Webpack](https://webpack.js.org/guides/code-splitting/#dynamic-imports)とか、[Code Splitting / React](https://reactjs.org/docs/code-splitting.html))
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。
1 https://webpack.js.org/guides/code-splitting/#dynamic-imports

HayatoKamono

HayatoKamono score 2335

2018/03/27 18:36  投稿

「認証チェック、権限チェックをサーバーサイド側でするにしても、ログイン画面やらログイン後の画面やらログイン不要の一般ユーザー用画面に関するコードを1つのjsのbundleファイルにまとめてクライアントに返していたら、ログイン後のコンテンツは見れないにしても、ログイン後の画面のコードは見えてしまうよね、それってどうなの?」っていう質問であるならば、
(A)そもそも、最初から管理用画面、一般ユーザー用画面を分けて、jsファイルもそれらの画面用のものをクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す
(B)Code Splittingを行って、bundleファイルの分割を行い、必要なタイミングで必要なbundleファイルを動的にクライアントに返す([Code Splitting - Dynamic imports](https://webpack.js.org/guides/code-splitting/#dynamic-imports))
小規模のアプリケーションの場合は1つのbundleファイルにコードをまとめてクライアントに返すかもしれませんが、規模が大きくなってくると、例えば、ログイン画面を表示するだけなのに、他の画面に関わるコードをまとめて送っていては、初期読み込みも遅くなってよろしくないので、Code Splittingを行なったりします。
ただ、Code Splittingはセキュリティーというよりは、パフォーマンス向上の文脈で使われることが圧倒的に多いかと思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る