10

私はほとんど読んだことがありますが、SQL インジェクションの一部がどのように発生するかをまだ 100% 理解していません!

知っている人から、私の例に基づいた SQL インジェクションの具体的な例を見てみたいと思います。そうすれば、それを複製、テスト、修正することができます。私は自分のコードを SQL インジェクトしようとしましたが、できませんでした。

1. SQL インジェクションは POST または GET メソッドでのみ発生する可能性があるというのは正しいですか? つまり、Web サイトでは、「サインアップまたは検索」などの投稿フォームまたは「search.php?tags=love」などのクエリである必要があります。

これは、POST メソッドを持つ次のコードを挿入することは可能ですか?

$name     = trim($_POST['username']);
$mail     = trim($_POST['email']);
$password = trim($_POST['password ']);

   if ($errors == "false") {
    $sql = 
        "INSERT INTO 
           clients 
         SET 
           name='" . mysql_real_escape_string($name) . "',
           mail='" . mysql_real_escape_string($mail) . "', 
           password='" . mysql_real_escape_string(sha1($password)) . "'";
           $connection->execute($sql);
        
    }

2.もう1つはGETメソッドを持っています:rate.php?like&videoID=250&userID=30

$sql = 
    "SELECT 
        videoID 
     FROM 
        likes 
     WHERE 
        videoID = '" .mysql_real_escape_string($videoID). "' AND UID = '" .mysql_real_escape_string($userID). "' LIMIT 1";
        $connection->execute($sql);

主題に自由を感じるが、具体的な例を使用する人を助けてください.

前もってありがとう、
イリア

4

2 に答える 2

10

SQLインジェクション攻撃は、ユーザー入力が不適切にエンコードされている場合に発生します。通常、ユーザー入力は、ユーザーがクエリで送信するデータ、つまり、、、、、、または$_GET配列の値です$_POST。ただし、ユーザー入力は、ソケット、リモートWebサイト、ファイルなど、他のさまざまなソースから取得することもできます。したがって、定数(など)以外のすべてをユーザー入力として扱う必要があります。$_COOKIE$_REQUEST$_SERVER'foobar'

投稿したコードでmysql_real_escape_stringは、ユーザー入力をエンコード(=エスケープ)するために使用されます。したがって、コードは正しいです。つまり、SQLインジェクション攻撃を許可していません。

呼び出しを忘れるのは非常に簡単であることに注意してくださいmysql_real_escape_string-そして熟練した攻撃者にとっては1回で十分です!したがって、adodbの代わりにプリペアドステートメントを使用した最新のPDOを使用することをお勧めします。

于 2012-08-13T20:00:04.913 に答える
2

私は最近、この件について徹底的に調査しており、非常に興味深い資料を他の人と共有したいと考えています。したがって、私の質問をより完全で、すべての人にとって有益なものにします.



YouTube から


ウィキペディアより


OWASP から


PHPマニュアルより


マイクロソフトとオラクルから


スタックオーバーフロー


SQL インジェクション スキャナー

于 2012-08-25T16:20:31.863 に答える