ホームページ > バックエンド開発 > PHPチュートリアル > SQLインジェクションとは何ですか?そしてそれを防ぐ方法

SQLインジェクションとは何ですか?そしてそれを防ぐ方法

Barbara Streisand
リリース: 2024-12-31 17:28:38
オリジナル
338 人が閲覧しました

SQL Injection คืออะไร? และวิธีการป้องกัน

SQLインジェクション

これは、データベース管理言語として SQL (Structured Query Language) を使用するデータベース システムで一般的なセキュリティ攻撃です。この攻撃は、攻撃者が悪意のある SQL コードをフォーム フィールドや URL などのユーザー入力フィールドに挿入して、データベース内のデータに不正にアクセスしたり、データを変更したりするときに発生します。

SQL インジェクションは、Open Web Application Security Project (OWASP) による Web アプリケーションの最も一般的かつ重要なセキュリティ脆弱性のリストである 2021 OWASP Top 10 で 3 位にランクされています。これは毎回更新されます。変化するサイバー脅威を反映するために数年にわたり

SQL Injection คืออะไร? และวิธีการป้องกัน

SQL インジェクション攻撃は第 3 位の脅威としてランク付けされており、Web アプリケーションのセキュリティの観点からこの問題の重要性と蔓延を示しています。インジェクション攻撃に適切に対処することは、情報システムを保護し、望ましくないアクセスを防ぐために不可欠です

SQLインジェクションを攻撃する方法

SQL インジェクション攻撃はさまざまな方法で実行できますが、最も一般的な方法は次の 2 つです。

  • 入力フィールドに値を直接挿入する
  • SQL ステートメントを追加するための URL の編集

SQL インジェクション攻撃の例

PHP コードを使用して、ユーザーがログインできる Web アプリケーションがあるとします

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>
ログイン後にコピー

ユーザー値を SQL ステートメントに直接挿入すると SQL インジェクションが発生する可能性があるため、このコードは脆弱です

SQL インジェクション攻撃

ハッカーはこのようなフィールドに悪意のある値を挿入する可能性があります

  • ユーザー名フィールド ' OR '1'='1
  • パスワードフィールド ' OR '1'='1

これにより、SQL ステートメントは次のようになります

SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'
ログイン後にコピー

「1」=「1」は常に真となる条件だからです。このコマンドは、データベース内のすべてのユーザーの情報を返します。これにより、ハッカーは実際のパスワードを使用せずにログインできます

SQLインジェクションを防ぐ方法

SQL インジェクションを防ぐ方法はいくつかあります。

  • プリペアドステートメントの使用
  • ストアド プロシージャの使用
  • 入力データのフィルタリングと検証。 ## PHP でのプリペアド ステートメントの使用例
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>
ログイン後にコピー

この例では、SQL ステートメントが事前に準備されており、$username と $password の値は後からステートメントに挿入されます。これにより、悪意のある SQL コードの挿入が不可能になります

要約する

SQL インジェクションは深刻な脅威です。ただし、これは、プリペアド ステートメントの使用や入力の検証など、安全なコードを作成することで防ぐことができます。優れた保護は、データを安全に保つだけではありません。しかし、それはシステムの信頼性を維持するのにも役立ちます。

以上がSQLインジェクションとは何ですか?そしてそれを防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート