前提・実現したいこと
- 数人のユーザーがブログのように記事を投稿し、それを不特定多数に公開するWEBアプリを考える。
- このWEBアプリは管理画面と公開画面があり、管理画面は認証を通ったユーザーしか操作する事が出来ないが、公開画面はだれでもアクセスする事が出来る。
- 管理画面ではユーザーがWYSIWYG(summernote等のオープンソースJSライブラリ)でコンテンツを入力し、そのHTMLデータをDBに保存する。
- 公開画面では、DBに保存されているHTMLデータをブログ形式で表示し、不特定多数に公開する。
- サーバー側のプログラムには Java EE 7 を使う。
質問
以下、セキュリティ的な観点かつ一般的な観点から質問します。
0. WYSIWYGで入力を許可するHTMLタグは限定すべきかどうか。
限定すべきとしたら、何を許可して何を禁止とするべきか。
0. 入力されたHTMLのうち、特定のタグのみ(例えば<script>など)をサーバー側でエスケープするにはどうするのが最善策か。
自分で正規表現を書く?Javaのライブラリを用いる?
正規表現で書く場合、漏れや脆弱性が無いかの検証はどのように行うべきか。
このような場合、エスケープは保存時に行うべきか、出力時に行うべきか、それとも両方で行うべきか。
0. 仮にJavaのライブラリで解決できる場合、どのライブラリを使用するのが好ましいか。
0. その他WYSIWYGを実装しユーザーにコンテンツを投稿させる上で気を付けるべきことはあるか。
0. HTMLをDBに保存する上で気を付けるべきことはあるか。
ブログのようなWEBアプリを実装する上でDBに保存するという方式は一般的かどうか。
(調べたところ、WordPressはHTMLデータをDBに保存しているらしいので、この実装を真似しようと考えました。)
補足情報
htmlタグのエスケープ処理はWEBアプリを実装する上で超基本的なセキュリティ対策だと思いますが、あまり多くのパターンの参考となる情報が見つけられませんでした。
例えば、「&,<,>,",'」などを全てエスケープする方法はたくさん情報が見つかりましたが、それらを行うとHTMLタグ全てが無効になってしまうため今回の件では使えませんでした。
みなさま、お手数お掛けしますが、アドバイス頂けると嬉しいです。
宜しくお願い致します。
FW/ツールのバージョンなど
apache-tomcat-7.0.78
Java EE 7 WEB
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/13 04:58
2018/09/13 05:07
2018/09/18 05:51
2018/09/18 05:54