Laravelアプリ サイバーセキュリティ(XSS, CSRF)

Laravel

概要

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)攻撃。
【流れ】

  1. 攻撃者が、脆弱性のあるサイトに不正なスクリプトを埋め込んだURLを仕込む。
  2. ユーザがURLにアクセスし、不正なスクリプトを含んだwebページが表示される。
  3. ユーザのウェブブラウザで不正なスクリプトが実行される。

脅威

  • 正規のウェブページと異なる情報が表示されてしまう。フィッシング詐欺につながる。
  • Cookie情報が漏洩し、不正アクセスされてしまう。

Laravelにおける対策

Bladeテンプレートで、変数を{{$hoge}}の形式で出力する。
*{{ }}はPHPのhtmlspecialchars関数(エスケープ処理)を通している。
公式: https://readouble.com/laravel/5.5/ja/blade.html

クロスサイトリクエストフォージェリ(CSRF)

概要

複数のサイトにまたがって(cross site)、ユーザになりすまし、ユーザの意図しない処理(request)を偽造する(forgery)攻撃。
【流れ】

  1. 攻撃者が、脆弱性のあるサイトに不正なスクリプトを埋め込んだURLを仕込む。
  2. ユーザがURLにアクセスし、不正なスクリプトが実行される。
  3. ログイン中のユーザのアカウントで、ユーザの意図しない処理が実行される。

脅威

  • ユーザのアカウントで商品が購入されたり、投稿されたりしてしまう。
  • ユーザの情報が変更される。

Laravelにおける対策

ビューの<form>タグ内の、@csrfを使う。
*隠しCSRFトークンフィールドをフォームに含めることで、CSRF保護ミドルウェアがリクエストを検証する。
公式: https://readouble.com/laravel/6.x/ja/csrf.html

CSRFも悪意のあるスクリプトが埋め込まれたURLにアクセスするところが起点になっているため、XSSの対策もまた有効である。

まとめ

Laravelフレームワークによって対策されているため安心。

タイトルとURLをコピーしました