徳丸本を久々に読んでXSS、SQLインジェクション、CSRFなどの盲点を復習した
概要
「安全なWebアプリケーションの作り方」という包括的にWeb技術のセキュリティが書かれた本があるのですが、それを久々に読んで盲点だったなーと思うことをまとめました。
- アプリケーションレイヤーで対策できること
- サーバー・インフラレイヤーで対策できること
に分けてまとめていきます。
アプリケーションレイヤーで対策できること
XSS対策の盲点
セッションIDのCookieにHttpOnlyを付与しよう
基本はhtmlspecialchars
ですが、それ以外に盲点になりそうな対策として、クッキーにHttpOnly
属性を付与するというのがあります。
セッションIDのCookie
にHttpOnly
を付与することで、万が一XSS脆弱性があってもセッションIDが盗まれることがなくなります。
HttpOnly
というのは、JavaScript
などのHttp以外の読み取りに対するOnlyなんですね。
URLを動的に生成する部分ではURLとして正しいかどうかのチェックをしよう
滅多にはないと思いますが、動的に生成されるURLが画像に対するhref
とかsrc
だった場合、javascript:HOGEHOGE
という形式の文字列がそこに入ると任意のJavaScript
を実行できてしまいます。
なので、そういった出力パタメータにはhttp(s)
から始まっているかどうかのチェッカーを挟みましょう。
とはいえあるかな・・・だいたいURLはサーバー側で生成している気がする。が。
CGMなどでユーザーにHTMLタグの入力を許可する場合は表示していい要素だけ逃してエスケープしよう
https://github.com/paquettg/php-html-parser
こういうライブラリを使って、HTMLの内容をパースして個別でタグに包んであげる、という感じでしょうかね。その際に中身をエスケープすれば無事で済みそうです。
SQLインジェクション対策の盲点
もちろん静的プレースホルダー利用一択なのはわかった上で。さらにやったほうがいいこと。
アプリケーションを操作するアカウントのデータベースの権限を適切に設定する
これはうっかりしそう。
アプリケーション側から利用するデータベースユーザーが例えばTableの削除権限を持っている必要はありませんし。
データベース消されるとかが一番ひどいので、こういった根っこの対策はやっておいて損は無さそう。
例えばこのページに権限の一覧が書かれているようなので参考までに。
権限の種類と設定されている権限の確認
CSRF対策の盲点
何度見てもCSRF
はどういう脆弱性なのか説明が難しいですね。
ざっくりいうと、僕が作ったサイトからTwitterのパスワード変更画面にリクエストを飛ばして、それをTwitterが承認したらやばいよねってやつです。
偽サイトをいくらでも作れてしまいます。
なので、CSRF
対策とは、あるリクエストが本物のユーザーによる当サイトからのアクセスであることを証明する手段ということになります。
まずはCSRF対策が必要なページを探そう
全ページに上記の対策をしたら大げさだし、そもそも自然流入してくる人たちまで弾かれちゃうのでやめましょう。
トークンで対策しよう
トークン埋め込みが一般的だけど・・・
JWT
が一昔前に流行りましたね。
JWT(JSON Web Token)でCSRF脆弱性を回避できるワケを調べてみた話
このQiita見たら多分思い出せる。手前味噌ですが。
サーバー・インフラレイヤーで対策できること
Webサーバーそのものの対策
脆弱性情報をRSSで監視しよう
こういうのちゃんとキャッチアップしないとなぁ。。。
https://jvn.jp/rss/
ポートスキャンを掛けて不要なポートが空いていないかを確認しよう
SSH
は特定のIPからしか許可しないようにしましょう。
CloudWatch LogsでSSHへの不正アクセスを検知し、通知を受ける。
上記の記事のように検知する仕組みを作るのもいいなと思います。
SSHサーバーのパスワード認証を辞めて公開鍵認証のみにしよう
総当たり攻撃を仕掛けられる可能性があるので、パスワード認証はそもそも避けておくべきです。
サーバー自体の見直しをしよう
Linuxサーバーのセキュリティに関してはこの記事がとてもわかり易くてよかったです。
まとめ
Webセキュリティは壊滅的なリスクを回避するためのスキルであるがゆえに、どうしても経営層とか企画レイヤーから甘く見られてしまう背景もあると思っていて、意識的にエンジニアサイドが身につけていかないと、と個人的には危機感を持って学んでいきたいなーと思っています。
おすすめのサイト、書籍などありましたら是非コメントやTwitterにて教えていただければ幸いです!!
Author And Source
この問題について(徳丸本を久々に読んでXSS、SQLインジェクション、CSRFなどの盲点を復習した), 我々は、より多くの情報をここで見つけました https://qiita.com/mejileben/items/6eb7ca85bb822e358189著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .