質問: いつもお世話になります。 ログイン型の小規模WEBサービスを作りたいと思っています。 ユーザーは特定少数(100人以下)なので、不特定多数に公開するサービスほどセキュリティに神経質になる必要性は少ないのかもしれないですが、それでもやはり脆弱の温床になることは避けたいと思っています。 一度、そのようなシステムをPerlで作ったことはあります。(100時間~くらいかかりました) そのときはライブラリを極力使わず、可能な限り自分でコーディングしました。 (使ったのは、HTMKL::Templateと文字コード変換系ぐらい) よくPerlではCGI.pmを使うようですが、「自分でできる部分はライブラリを使わない」をモットーにがんばってました・・・ 別にそのときのシステムに不満があるわけではないのですが、そのときはDBを使わず、すべてテキストファイルにさまざまな情報を保存していました。(ユーザーの情報を) 今回、MySQLを使ってみようと思っているのですが、「自作のログインシステムは脆弱性の温床になる」という記事を見かけ躊躇しております。 どうしても自分で把握できない部分(具体的にはライブラリやDBアクセス)への攻撃が想像つきません。 大量の個人情報を扱う、ということはないのですが、やはりこの一言が気になってしまいました。 仮にCGIに脆弱性がなくてもOSの設定に脆弱性があったら元も子もないと思います。 まとめると **・可能な限り外部ライブラリを使わずに自作したい** **・ログインシステムは自作してもよいのか(ダメならオープンソース等教えてください)** **・脆弱性を生まないためにはどうすればよいのか(参考サイト/書籍を教えてください)** このあたりについて皆様の意見をいただけますと幸いです。 (OSはUbuntuを想定しています) --- **以下指摘がありましたので別の質問として投稿させていただきます** **既に回答くださった方ありがとうございます。今後は別スレでお願いいたします** また、今回の件に限らず、攻撃に対する対策というものがいまいちよくわかっていません。 自宅サーバーを持ってはいますが、ほとんどのソフトをデフォルト設定で使っているような状態です。 (せいぜいデフォルトのポート番号を変更する程度) (SSH、FTP、HTTP、ファイル共有(Localで使用)、無線LANのAP、ゲーム鯖(Minecraft)等) どれも不特定多数を相手にするものではありませんが、インターネットからアクセスできる以上、最低限のセキュリティ対策はしたいと思っています。(盗まれて困る情報は皆無ですが、踏み台にされるのが怖い) 攻撃に対する対策について詳しいサイト等ありましたら教えていただけますと幸いです。 (かならずこれは読むべき!!!という書籍がありましたらあわせて紹介していただけると幸いです) また、今回の件に限らず、攻撃に対する対策というものがいまいちよくわかっていません。 自宅サーバーを持ってはいますが、ほとんどのソフトをデフォルト設定で使っているような状態です。 (せいぜいデフォルトのポート番号を変更する程度) 攻撃に対する対策について詳しいサイト等ありましたら教えていただけますと幸いです。 (絶対にこれがいい!というような書籍がありましたらあわせて紹介していただけると幸いです)
回答: ログイン機能関連(セッションも含め)で発生する脆弱性として、 * SQLインジェクション * セッションの盗聴 * セッション固定攻撃 * CSRF などが存在しています。そして、作り方によっては「ログインできない」「セッションがすぐ切れる」などのトラブルが起きることもあります。 フレームワーク標準のセッションですらトラブルが起きがちなところですので、(実用品として作る、という観点では)「自前で作る」という選択肢は、かかる手間とリスクに見合うだけの利点が見込めないですので、決しておすすめできません(どういう事情で「自前で作りたい」のでしょうか)。「多くの人が使っている」オープンソースライブラリを使ったほうが多数の目が通っているので、確実に安全です。 Webセキュリティ関連の文書としては、IPAが出しているガイドや、書籍では通称「徳丸本」が参考になります。