概要
Laravelを用いたウェブサイトのサイバーセキュリティについて考察。
サイバーセキュリティに関して全く考えずにコーディングした後、「あれ、セキュリティのこと全く考えてないな」と気づいて調べてみたところ、結果的にlaravelフレームワークでほとんど対策できていた。
本記事では、クロスサイトスクリプティング(XSS)とクロスサイトリクエストフォージェリ(CSRF)
を取り扱います。
参考: https://www.ipa.go.jp/security/vuln/websecurity.html
環境
- Windows 10
- PHP 8.0.0
- laravel 8.16.1
クロスサイトスクリプティング(XSS)
概要
複数サイトにまたがって(cross site)、悪意のあるスクリプトを実行させる(scripting)攻撃。
【流れ】
- 攻撃者が、脆弱性のあるサイトに不正なスクリプトを埋め込んだURLを仕込む。
- ユーザがURLにアクセスし、不正なスクリプトを含んだwebページが表示される。
- ユーザのウェブブラウザで不正なスクリプトが実行される。
脅威
- 正規のウェブページと異なる情報が表示されてしまう。フィッシング詐欺につながる。
- Cookie情報が漏洩し、不正アクセスされてしまう。
Laravelにおける対策
Bladeテンプレートで、変数を{{$hoge}}
の形式で出力する。
*{{ }}
はPHPのhtmlspecialchars関数(エスケープ処理)を通している。
公式: https://readouble.com/laravel/5.5/ja/blade.html
クロスサイトリクエストフォージェリ(CSRF)
概要
複数のサイトにまたがって(cross site)、ユーザになりすまし、ユーザの意図しない処理(request)を偽造する(forgery)攻撃。
【流れ】
- 攻撃者が、脆弱性のあるサイトに不正なスクリプトを埋め込んだURLを仕込む。
- ユーザがURLにアクセスし、不正なスクリプトが実行される。
- ログイン中のユーザのアカウントで、ユーザの意図しない処理が実行される。
脅威
- ユーザのアカウントで商品が購入されたり、投稿されたりしてしまう。
- ユーザの情報が変更される。
Laravelにおける対策
ビューの<form>
タグ内の、@csrf
を使う。
*隠しCSRFトークンフィールドをフォームに含めることで、CSRF保護ミドルウェアがリクエストを検証する。
公式: https://readouble.com/laravel/6.x/ja/csrf.html
CSRFも悪意のあるスクリプトが埋め込まれたURLにアクセスするところが起点になっているため、XSSの対策もまた有効である。
まとめ
Laravelフレームワークによって対策されているため安心。