回答編集履歴

4

誤字の修正

2018/03/28 02:02

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -212,19 +212,23 @@
212
212
 
213
213
 
214
214
 
215
+ 追記1に重複する部分がいくつかありますが、重複する部分は追記1への回答を参照してください。
216
+
215
- 1の方に全部下記ましたが、ユーザーに予め渡す情報量が多いのがSPAですからね
217
+ ユーザーに予め渡す情報量が多いのがSPA、たしかにそのような懸念はあります。
218
+
219
+
220
+
216
-
221
+ まずはWebサイト全体で使う全ての情報を割り出し一覧化します。
217
-
218
-
222
+
219
- まずは画面部品の情報の一覧を割り出し、どのレベルでガードしなければならないかを設定します。
223
+ 次に各情報どのレベルでガードしなければならないかを設定します。
220
-
224
+
221
- これは公開しても良いだろう…といった情報ならばbundle.jsに含めて表示・非表示を切り替えれば良いです
225
+ これは公開しても良いだろう…といった情報ならばbundle.jsに含めて表示・非表示を切り替えれば良いですし、
222
-
226
+
223
- その他、公開出来ない情報全てAjax通信で別途取りに行く設計にしてください。
227
+ 公開出来ない情報全てAjax通信で別途取りに行く設計にしてください。
224
-
225
-
226
-
228
+
229
+
230
+
227
- 当然あれもこれも非公開にしたければ、相応のAjax通信用のURL(エンドポイント)は多くなります。
231
+ あれもこれも非公開にしたければ、相応の数のAjax通信用のURL(エンドポイント)が必要になります。
228
232
 
229
233
  手間や開発コストも吟味しながら取捨選択を行ってください。
230
234
 
@@ -235,3 +239,11 @@
235
239
  例えばJSONファイルを展開してアンケートのフォーム部品を生成するロジックを非公開にしたい。
236
240
 
237
241
  ……という意図ならば、もうSPAは諦めてください。
242
+
243
+
244
+
245
+ SPAで運営しているWebサイト・Webアプリは全て盗まれるリスクとのトレードオフで運営しています。
246
+
247
+ ですので、守るべき対象はサーバーに保存する個人情報やプロジェクト情報であり、
248
+
249
+ そこの部分でマネタイズしているから他社にbundle.jsを盗まれたとしてもダメージは軽微であるという判断を行っているからです。

3

もう少し、質問者さんがどう動けば良いのかを見据えた回答に調整

2018/03/28 02:02

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -130,17 +130,73 @@
130
130
 
131
131
 
132
132
 
133
+ SPAではない既存のWebアプリで
134
+
135
+ HTML情報上にWebサイトを利用する全てのユーザーの住所や氏名を`display: none;`の状態で埋め込んでおいて、
136
+
137
+ JavaScriptで表示・非表示を切り替える開発者がいますか?
138
+
139
+
140
+
141
+ それと同じです。
142
+
143
+ bundle.js内にはそのユーザーが閲覧しても良い情報しか内包してはいけません。
144
+
145
+ 貴方が考えている「一旦全て送り、ユーザー側で非表示にさせる」というのは
146
+
147
+ 上記の全ユーザーの氏名や住所をJavaScript制御でON・OFFを切り替える発想と同じです。
148
+
149
+
150
+
151
+ > じゃあどうするのか?
152
+
153
+
154
+
133
- 例えばログインユーザーがンケート画面のリンクをクリックたら、
155
+ Ajaxでそのユーザの権限下でアクセス出来る情報別途取得てください。
156
+
134
-
157
+ bundle.jsにはAjax通信の結果(JSON)を解析して、アンケートフォームを作り出すロジックのみを埋め込んでください。
158
+
159
+ これで質問文にあった「男性に化粧品の情報を公開する」懸念は払拭されます。
160
+
161
+
162
+
135
- Ajax通信で「私は女性なので、化粧のアンケートください」という申請を行い
163
+ 「私に紐づくアンケートはある?」ということで
136
-
164
+
137
- アンケート項目だけをJSONで受け取りDOMとして展開る作りにすることも可能です
165
+ `example.com/api/questionnaires`に向てAjax通信行います。
138
-
139
-
140
-
166
+
167
+
168
+
141
- 男が「私も女性で、化粧のアンケートください」って通信てきたらどうするか?
169
+ 女性の場合だけ化粧のアンケートを表示したいなば、
170
+
142
-
171
+ きっと認証情報には名前、性別、年齢等の情報はありますよね。
172
+
173
+
174
+
175
+ ```JSON
176
+
177
+ [
178
+
179
+ {"name": "化粧品Aは既に利用されていますか?", "candidates": ["はい", "いいえ"]},
180
+
181
+ {"name": "化粧品Aを5点満点で評価してください", "candidates": ["1", "2", "3", "4". "5"]},
182
+
183
+ {"name": "化粧品Aのモニターに参加しますか?", "candidates": ["はい", "いいえ"]},
184
+
185
+ {"name": "化粧品Bは既に利用されていますか?", "candidates": ["はい", "いいえ"]},
186
+
187
+ {"name": "化粧品Bを5点満点で評価してください", "candidates": ["1", "2", "3", "4". "5"]},
188
+
189
+ {"name": "化粧品Bのモニターに参加しますか?", "candidates": ["はい", "いいえ"]},
190
+
191
+ ]
192
+
193
+ ```
194
+
195
+
196
+
197
+ 男性の場合は空の配列を返せば化粧品の情報は送られません。
198
+
143
- 認証してるユーザー確認たけどお前男じゃなかふざけんな」エラーを返せば解決です。
199
+ まぁ、別に男性に化粧品名くらい教えても大丈夫かとは思いますが、認証情報と脳内補完して回答す。
144
200
 
145
201
 
146
202
 
@@ -156,16 +212,26 @@
156
212
 
157
213
 
158
214
 
159
- というか、ユーザーに予め渡す情報量が多いのがSPAですからね。
215
+ 1の方に全部下記ましたが、ユーザーに予め渡す情報量が多いのがSPAですからね。
216
+
217
+
218
+
160
-
219
+ まずは画面部品の情報の一覧を割り出し、どのレベルでガードしなければならないかを設定します。
161
-
162
-
220
+
163
- 誰にでも公開して良い情報は予めJS全部含めて投げ渡してあげれば良いですが、
221
+ これは公開して良いだろう…といった情報ならばbundle.jsに含めて表示・非表示を切り替えれば良いです
164
-
222
+
165
- 特定人にしか渡してはいけないデータならば死ぬ気ょう
223
+ 他、公開出来ない情報全てはAjax通信別途取に行く設計にてください
166
-
167
-
168
-
224
+
225
+
226
+
169
- ほぼ全て項目追記1の手法を応用ることで可能です
227
+ 当然あれもこれも非公開にしたければ、相応Ajax通信用のURL(エンドポイント)多くなります。
170
-
228
+
171
- 難読化(uglify)併用しながらしっかり設計って管理しましょう
229
+ 手間や開発コスト吟味しながら取捨選択ってください
230
+
231
+
232
+
233
+ もし認証情報を利用した部分以外、
234
+
235
+ 例えばJSONファイルを展開してアンケートのフォーム部品を生成するロジックを非公開にしたい。
236
+
237
+ ……という意図ならば、もうSPAは諦めてください。

2

追記への対応

2018/03/28 01:56

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -83,3 +83,89 @@
83
83
  Webpack等が吐き出すJavaScriptファイル自体をAdmin用・エンドユーザー用に分けてしまっても良いと思います。
84
84
 
85
85
  Admin用は少しくらい不具合が出ても問題になりにくいのでそんなに問題にはならないと思います。
86
+
87
+
88
+
89
+ ---
90
+
91
+
92
+
93
+ 【追記1への回答】
94
+
95
+
96
+
97
+ そもそもブラウザの本質を理解していますか?
98
+
99
+ ブラウザはただ受け取ったHTML・CSS・JS・画像ファイルを内部的に展開して画面に表示しているだけです。
100
+
101
+ そしてWebサーバへHTTP通信を行いながらHTML・CSS・JS・画像ファイルをまた受け取る。
102
+
103
+
104
+
105
+ これがコマンドラインツールのcurlになった瞬間不正になるわけではありません。
106
+
107
+ 全世界のWebサーバはHTTP通信を行う全てのクライアントが対象だからです。
108
+
109
+
110
+
111
+ > コンソールからコンポーネントに渡すデータを変えればそのコンポーネントの挙動を変更することとが可能だと思います。
112
+
113
+
114
+
115
+ Chromeと普通のWebサイトでも可能です。
116
+
117
+ デベロッパーツール等を利用さえすれば現状のDOM構造を好き勝手に歪めてリクエスト飛ばせますよね。
118
+
119
+
120
+
121
+ サービス提供元がわざわざHTMLを渡して上げてるのは、
122
+
123
+ この項目に従って回答してくださいね、回答が済んだら○○URLのポストに投函してくださいねという**ガイドライン**です。
124
+
125
+ クラッカーにはHTMLやJSでいくら頑張っても何の対策にもなりません。
126
+
127
+
128
+
129
+ > クライアントサイドレンダリングの場合は一旦全て送り、ユーザー側で非表示にさせるといった処理が考えられそうです。
130
+
131
+
132
+
133
+ 例えばログインユーザーがアンケート画面のリンクをクリックしたら、
134
+
135
+ Ajax通信で「私は女性なので、化粧のアンケートください」という申請を行い、
136
+
137
+ アンケート項目だけをJSONで受け取りDOMとして展開する作りにすることも可能です。
138
+
139
+
140
+
141
+ 男が「私も女性なので、化粧のアンケートください」って通信してきたらどうするか?
142
+
143
+ 「認証してるユーザー確認したけどお前男じゃないかふざけんな」エラーを返せば解決です。
144
+
145
+
146
+
147
+ ---
148
+
149
+
150
+
151
+ 【追記2への回答】
152
+
153
+
154
+
155
+ > SPAではややロジックも担当している印象を受けたためこのような質問をしました。
156
+
157
+
158
+
159
+ というか、ユーザーに予め渡す情報量が多いのがSPAですからね。
160
+
161
+
162
+
163
+ 誰にでも公開して良い情報は予めJSに全部含めて投げ渡してあげれば良いですが、
164
+
165
+ 特定の人にしか渡してはいけないデータならば死ぬ気で守りましょう。
166
+
167
+
168
+
169
+ ほぼ全ての項目は追記1の手法を応用することで可能です。
170
+
171
+ 難読化(uglify)も併用しながらしっかり設計を練って管理しましょう。

1

秀丸作者の下りが記憶と違って嘘になってたので修正

2018/03/27 12:50

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  例えば、かの有名な秀丸エディタはパスワードを入力するだけで認証を突破出来る脆弱なシステムです。
60
60
 
61
- しかし、その作者は「もう沢山儲けたので、無料で使いたい人はお好きにどうぞ。でも魅力的に感じてカンパしたといはその時に改めて払って下さい」という対応をしています。
61
+ しかし、その[作者は](http://hrnabi.com/2015/04/14/6878/)学生やフリーソフトウェアの開発者は無料にしてあげたいスワードを変えたり電話対応したりするコストが大変なので実質黙認状態、でもまとまったライセンスを買ってただけるもいらしゃっです」というゆるい対応をしています。
62
62
 
63
63
 
64
64