SQLインジェクションの脆弱性とは何ですか

清浅
リリース: 2020-09-15 10:35:27
オリジナル
9484 人が閲覧しました

SQL インジェクションの脆弱性とは、悪意を持って入力された SQL コマンドを Web フォームの送信に挿入したり、ドメイン名やページ リクエストのクエリ文字列を入力したりすることを指し、最終的にはサーバーをだまして悪意のある SQL コマンドを実行させます

SQL インジェクションの脆弱性

##名前が示すように、SQL インジェクションの脆弱性により、攻撃者は SQL ステートメントに悪意のある入力を挿入することができます。この問題を完全に理解するには、まずサーバーサイドのスクリプト言語が SQL クエリをどのように処理するかを理解する必要があります。

たとえば、Web アプリケーションの関数が次の SQL ステートメントを使用して文字列を生成するとします。

$statement = "SELECT * FROM users WHERE username = 'bob' AND password = 'mysecretpw'";
ログイン後にコピー
この SQL ステートメントは、接続されているデータベースに文字列を送信する関数に渡されます。解析されて実行され、結果が返されます。

このステートメントにはいくつかの新しい特殊文字が含まれていることにお気づきかもしれません:

  • * : 選択されたデータベース行のすべての列を返す SQL データベース命令です。

  • =: 検索された文字列
  • ' に一致する値のみを返すように SQL データベースに指示します。 SQL データベースに次のことを指示するために使用されます。文字列の検索 開始位置または終了位置
  • 次に、Web サイト ユーザーがログイン フォームなどで "$user" と "$password" の値を変更できる次の例を考えてみましょう。 :
$statement = "SELECT * FROM users WHERE username = '$user' AND password= '$password'";
ログイン後にコピー

アプリケーションが入力をサニタイズしない場合、攻撃者は特別な SQL 構文をステートメントに簡単に挿入できます:

$statement = "SELECT * FROM users WHERE username = 'admin'; -- ' AND password= 'anything'";= 'anything'";
ログイン後にコピー

    admin'; - : は2 つの新しい特殊文字を含む攻撃者の入力:
  • ; : 現在のステートメントが終了したことを SQL パーサーに示すために使用されます (ほとんどの場合は必要ありません)
  • - : SQL パーサーに行の残りを指示します
  • この SQL インジェクションは、パスワード検証を効果的に削除し、既存のユーザー (この場合は「admin」攻撃者) のデータセットを返します。パスワードを指定せずに管理者アカウントを使用してログインできるようになりました。

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

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