●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

SQLインジェクションとは?Webアプリの重大な脆弱性とその対策

SQLインジェクション(SQL Injection)とは、ユーザーの入力を悪用して、意図しないSQL文を実行させる攻撃のことです。
適切に対策しないと、データの盗み見、改ざん、削除など重大な被害につながる恐れがあります。

攻撃の仕組み

SQLインジェクションは、ユーザー入力をSQL文にそのまま組み込んでいる場合に発生します。

例:脆弱なコード

$id = $_GET["id"];
$sql = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($conn, $sql);

このコードに ?id=1 OR 1=1 と入力されると、以下のようにすべてのユーザー情報が取得されてしまいます:

SELECT * FROM users WHERE id = 1 OR 1=1

主な被害例

  • パスワードの漏洩
  • 顧客情報の改ざんや削除
  • ログイン認証の突破(管理者として不正ログイン)

安全な対策方法

@ プリペアドステートメント(PDO)を使う

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindValue(":id", $_GET["id"], PDO::PARAM_INT);
$stmt->execute();

A 入力チェック(バリデーション)

数字だけを受け付ける場合:

$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);

B エスケープ処理(最終手段)

mysqli_real_escape_string() などを使って入力値を無害化することも可能ですが、プリペアドステートメントの方が安全です。

絶対に避けたいコード例

// 悪い例:SQL文に直接変数を埋め込む
$sql = "DELETE FROM users WHERE id = " . $_POST["id"];

このような書き方は危険なので、必ずプリペアドステートメントを使用してください。

まとめ

  • SQLインジェクションは深刻なセキュリティ脅威
  • プリペアドステートメントで根本的に防げる
  • 入力チェックやエスケープ処理も補助的に行う
  • 決してSQL文に直接ユーザー入力を埋め込まない

SQLインジェクションは、対策すれば完全に防げる攻撃です。
安全なアプリケーション開発のために、常に「プリペアドステートメント+バリデーション」を意識してコーディングしましょう。

 

PHP関連用語集

−−−−−  PHP  −−−−−

PHPの変数とは?基本構文と使い方をわかりやすく解説

PHPの配列とは?複数のデータをまとめて扱う基本構文

PHPの連想配列とは?名前付きのキーでデータを管理する方法

PHPのクラスとは?オブジェクト指向プログラミングの基本を解説

PHPのオブジェクトとは?クラスから作る実体の使い方を解説

PHPのメソッドとは?クラス内の関数の定義と使い方を解説

PHPのプロパティとは?クラスに値を持たせる仕組みを解説

PHPのコンストラクタとは?オブジェクト生成時の初期化処理を解説

PHPの継承とは?クラスを引き継いで再利用する仕組みを解説

PHPのインターフェースとは?クラス設計を柔軟にする仕組みを解説

PHPのトレイト(trait)とは?コードの再利用を実現する仕組みを解説

PHPの名前空間(Namespace)とは?クラスや関数の重複を防ぐ仕組みを解説

PHPのグローバル変数とは?スコープと使い方をわかりやすく解説

PHPのスーパグローバル変数とは?フォーム・セッション処理に欠かせない基本知識

PHPの$_GETとは?URLパラメータを取得する基本と使い方

PHPの$_POSTとは?フォームからのデータを安全に受け取る方法

PHPの$_SESSIONとは?ユーザー情報を一時的に保持する仕組みを解説

PHPの$_COOKIEとは?ユーザー情報をブラウザに保存・取得する方法

PHPの$_SERVERとは?サーバーやリクエスト情報を取得する便利な変数

PHPのincludeとは?外部ファイルを読み込んでコードを分割・再利用

PHPのrequireとは?外部ファイルを確実に読み込むための構文

PHPのエラーハンドリングとは?エラーの種類と対処法をわかりやすく解説

PHPの例外処理(Exception)とは?try-catchで安全なコードを書く方法

PHPのPDO(PHP Data Objects)とは?安全で柔軟なデータベース接続方法

SQLインジェクションとは?Webアプリの重大な脆弱性とその対策

PHPのフォームバリデーションとは?安全な入力処理の基本

PHPのheader()関数とは?HTTPヘッダーを操作する基本と活用法

PHPのJSONエンコード / デコードとは?配列やオブジェクトをJSON形式で扱う方法

HTTPレスポンスコードとは?PHPでステータスを正しく返す方法

Laravel(ララベル)とは?PHPで人気No.1のWebアプリケーションフレームワーク