25年度入社の斎藤です。
今回は、Webアプリケーションに対する代表的な攻撃手法であるXSS(クロスサイトスクリプティング)について、概要を簡単にまとめ、XSS攻撃に対する一般的な対策とLaravelでどのように対策が行われているのかについて説明しようと思います。
XSS(クロスサイトスクリプティング)とは
XSSとは、脆弱性のあるwebサイト上で悪意のあるスクリプトを紛れ込ませることで、Webサイトを閲覧したユーザの環境において、紛れ込ませたスクリプトを実行させる攻撃手法です。具体的なXSSの流れを以下の簡単な例で説明します。
前提条件
・脆弱な掲示板サイトが存在
・投稿内容をそのままHTMLとして表示する仕様(エスケープ処理がない)
※エスケープ処理については後述
ステップ1:攻撃者が悪意のあるスクリプトを投稿
攻撃者が掲示板の投稿フォームに、以下のようなスクリプトを投稿する。

document.cookie:閲覧者のCookie情報を取得
fetch():攻撃者のサーバーにCookie情報を送信
このスクリプトが実行されると、閲覧者のCookie情報が攻撃者のサーバーに送信される仕組みになっている。
ステップ2:被害者が掲示板を閲覧
攻撃者の投稿内容が、閲覧者のブラウザに送信されます。
ステップ3:被害者のブラウザでスクリプトが実行される
被害者のブラウザは、<script>タグの中身を正規のJavaScriptコードとして実行してしまう。
ステップ4:攻撃者に閲覧者のCookie情報が抜き取られる
このようにして攻撃者は、盗んだCookie情報を使って被害者になりすまし、不正に被害者のアカウントでログインすることが可能になります。
今回の例は、XSSの中でも特に格納型XSSと呼ばれる攻撃手法です。ほかに、反射型XSSやDOM Based XSSといった攻撃手法も存在します。
XSS対策
有効な対策としてエスケープ処理を行うことが重要です。
エスケープ処理とは、 <script>のようなウェブページの表示に影響する特別な記号文字を無害な文字(HTMLエンティティ)に置き換えることです。
具体的には以下のような置き換えを行います。

“<script>”であれば、 <script> に変換される。
Laravelでのエスケープ処理
Laravelでは {{ $変数 }} という記述方法で、変数の中身を自動的にエスケープしてくれる機能があります。

※{{}}内の変数に対して自動でhtmlspecialchars(エスケープ処理のメソッド)を施してくれます
エスケープ処理を行わずに表示させたい場合は、{{!! $変数 !!}}という記述方法を用います。

最後に
今回、XSS(クロスサイトスクリプティング)ついて学ぶ機会を得たことで、Webアプリケーションのセキュリティに対する理解が深まりました。
特に、攻撃者がどのように悪意のあるスクリプトを実行させるのか、ブラウザのCookie送信の仕組みをどう悪用するのかといった、攻撃の手順と仕組みを理解することで、知らないことに対する不安から、知識に基づいた適切な警戒心へと意識が変化したことが、今回の学びの最も大きな収穫だと考えています。
今回の話は以上です。
ありがとうございました。
