LaravelのSQLインジェクション対策について、XSSとの違いと共に分かりやすく解説

Laravelセキュリティ

LaravelはSQLインジェクション対策もしっかりされています。

ユーザーは特に何の処理もせずにしなくて大丈夫です。

「SQLインジェクションとは、一体どんなものだろう?」

「クロスサイトスクリプティング(XSS) とどう違うの?」

と思ったら、読んでくださいね。

SQLインジェクションについて、Laravelの対策、そしてXSSとの違いを分かりやすく説明します。

SQLインジェクションとは

SQLインジェクションとは、システムが想定していないSQL文を実行させて、データベースを不正に操作する攻撃のことです。

SQL文とは、データベースを操作する言語のこと。

たとえばユーザーが、Webアプリ上のフォームに個人情報を入力したとします。

この情報はWebサーバーを通じてデータベースに渡されます。

この時に、攻撃を受けた状態だと、ユーザーの情報が漏洩したり、操作されたりしてしまうのです。

このSQLインジェクションによってどんな被害が起こるかといえば、例えば2021年6月5日、サンリオ子会社がこの攻撃にあい、メールアドレス4万6000件が流出したと発表がありました。

じゅんこ
じゅんこ

担当者の身になって考えると、おそろしいですね。

もちろんユーザー側でもコワイことですが。

クレジットカード情報は流出しなかったようですが、ただ、メールアドレスが手に渡ってしまうと、詐欺メールなどが送信される恐れがあります。

LaravelのSQLインジェクション対策

Laravelでは、デフォルトで、このSQLインジェクション対策が施されています。

SQLインジェクションでは、SQL文の中にコードを入れられてしまいます。

ですがLaravelはパラメーターバインディングによって、データがコマンドとして認識されないようにしてくれます。

パラメーターバインディングとは、データの箇所にコードが書かれていても、コードではなくデータとして扱うようにする処理です。

Laravelの公式マニュアルにも、下記のように記載されています。

Laravelクエリビルダは、PDOパラメーターバインディングを使用して、SQLインジェクション攻撃からアプリケーションを保護します。クエリバインディングとしてクエリビルダに渡たす文字列をクリーンアップやサニタイズする必要はありません。

参考:https://readouble.com/laravel/8.x/ja/queries.html

ただし、ひとつ注意点があります。

Laravelは、Eloquent ORMやクエリビルダのほか、DBクラスによる操作も可能です。

SQL文に慣れている人はDBクラスによる操作を実行すると思いますが、この場合は、LaravelのSQLインジェクション対策の対象外となります。

じゅんこ
じゅんこ

つまり、普通にLaravelの構文を使っていれば大丈夫ということです。

Eloquentとクエリビルダの違いは、こちらの記事にまとめています。

SQLインジェクションとXSSの違い

最後にSQLインジェクションとクロスサイトスクリプティング(XSS)の違いについて、説明しますね。

SQLインジェクションは、Webアプリのフォームから仕掛けて、サーバーがデータベースにアクセスする時に攻撃するものでした。サーバーからデータベースに送られるSQL文の中に悪意あるコードが入るようにしてきます。

一方XSSは、Webアプリのフォームから仕掛けて、サーバーのコードを攻撃します。フォームからサーバーに、悪意あるjavaScriptのコードなどを入れてきます。

じゅんこ
じゅんこ

似ていますが、攻撃する場所と言語が違います。

XSSはjavascript、SQLインジェクションはSQLコードを使った攻撃です。

XSSとSQLインジェクションの違い

クロスサイトスクリプティングは、エスケープ処理によって対策が可能です。具体的には、ビューファイル上で、変数を{{ }}で囲みます。

ビューファイルでは波カッコで囲まないと変数として機能しないので、対策し忘れることはないでしょう。

SQLインジェクション対策は、特に何もしなくてもOKです。

Laravelは、こんなふうにユーザーの負担にならないセキュリティ対策を施してくれています。

とはいえ、Web開発をする立場であれば、こういったセキュリティ対策を知識としては知っておく必要はあるかと思います。

聞かれた時に答えられないと、お客さんの信頼をなくしますし。

このあたりも含めてLaravelを基本から学びたいと思う人のために、「Laravelの教科書」という学習サイトを作成しました。登録無料です。

ご興味があれば、こちらのご案内ページから、詳細を見てみてくださいね。

Laravelの教科書について詳しく見る

Laravelセキュリティ

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる


Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
セミナーで、StripeやChatGPT連携、デバックなど実践スキルを分かりやすく学べます。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました