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コードを使った攻撃です。
クロスサイトスクリプティングは、エスケープ処理によって対策が可能です。具体的には、ビューファイル上で、変数を{{ }}で囲みます。
ビューファイルでは波カッコで囲まないと変数として機能しないので、対策し忘れることはないでしょう。
SQLインジェクション対策は、特に何もしなくてもOKです。
Laravelは、こんなふうにユーザーの負担にならないセキュリティ対策を施してくれています。
とはいえ、Web開発をする立場であれば、こういったセキュリティ対策を知識としては知っておく必要はあるかと思います。
聞かれた時に答えられないと、お客さんの信頼をなくしますし。
このあたりも含めてLaravelを基本から学びたいと思う人のために、「Laravelの教科書」という学習サイトを作成しました。登録無料です。
ご興味があれば、こちらのご案内ページから、詳細を見てみてくださいね。