2011-08-15 6 views
5

私は以下のようなSQLインジェクションのサンプルコードを見たことがありますが、sqlの '/ *'はどういう意味ですか?sqlの/ *はどういう意味ですか?

$_POST['username'] = chr(0xbf) . chr(0x27) . ' OR username = username /*'; 

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

$mysql['username'] = addslashes($_POST['username']); 

$mysql['password'] = addslashes($_POST['password']); 

$sql = "SELECT * FROM users WHERE username = '{$mysql['username']}' AND password = '{$mysql['password']}'"; 

$result = $db->query($sql); 
+0

http://dev.mysql.com/doc/refman/5.1/en/comments.html –

答えて

8

/*がコメントの先頭です。 */はコメントを終了します。攻撃者は残りのクエリをコメントアウトしようとしています。

+0

ですが、終了するには*/が必要ですか? /*だけがSQLを間違ったものにしました。 – xdazz

+0

@xdazz:あなたの質問に投稿したやり方では、攻撃はクローズコメントトークンのないクエリになるようです。しかし、攻撃者がパスワードフィールドに '* /'を含めたと想像してください。どのようにコメントが終了し、攻撃者のコードが注入された適切な形式のクエリが得られるかを見ることができます。 – Asaph

+2

コメントは開いたままにしておくことができます。 – hakre

0

/*は、コメントを開始しますので、*/

あなたの攻撃者はこれにより、パスワードチェック

0

/*の効果を無効化し、オープンなコメントを導入遭遇するまでそれ以降のすべてが無視されるの開始を意味しますたとえば、複数行コメント

/* 

CREATE PROC A_SAMPLE_PROC 

BEGIN 

AS 
SELECT * FROM A_SAMPLE_TABLE 
END 

*/ 

ながら、は1行のコメントを意味します。 MS SQL Server StudioでのコメントのキーボードショートカットはCtrl + K, Ctrl + C

関連する問題