5

MySQL では、キーワード自体にコメントを挿入できます。これにより、実際のクエリの構文を維持しながら、一部の入力検証フィルターをバイパスする別の手段が提供されます。例えば:

SEL/*foo*/ECT username,password FR/*foo*/OM users

しかし、保存された単語の間をコメントアウトするにはどうすればよいでしょうか? 利点は何ですか?そして、なぜそれは一種のバイパスなのですか?

バグっぽい!

4

2 に答える 2

4

その引用は2007年の本からのものです...それはMySqlの以前のバージョンに当てはまるかもしれませんが、その構文がエラーを返さないMySQLバージョンを見つけることができません。

この構文の背後にある元の考え方は、アプリケーションが特定のSQLキーワードをブラックリストに登録しようとした場合、この攻撃によってアプリケーションがだまされるというものでした。

たとえば、アプリケーションが攻撃者がSQLインジェクションを使用してデータベースからレコードを削除するのを阻止しようとした場合、許可しない用語のブラックリストは除外されDELETEますが、除外に失敗しますDEL/**/ETE

ただし、動的クエリで許可しない用語のブラックリストを作成しようとすることは、SQLインジェクションを防ぐためのひどく効果のないアプローチです...そして、パラメータ化されたクエリなど、SQLインジェクション攻撃を防ぐためのはるかに簡単で効果的な手段があります。埋め込まれたコメント構文は、それがまだ有効であっても役に立たない。

OWASPから

ほとんどの場合、ブラックリストには抜け穴がたくさんあり、SQLインジェクション攻撃の防止に効果がありません。たとえば、攻撃者は次のことができます。

  • 引用符で囲まれていないターゲットフィールド
  • 特定のエスケープされたメタ文字の必要性を回避する方法を見つける
  • ストアドプロシージャを使用して、挿入されたメタ文字を非表示にします
于 2013-03-22T22:51:20.437 に答える
1

Michael Fredrickson の完璧な回答に感謝します。
mysql サイトをチェックすると、mysqlのすべてのバージョンでこのようなコメント方法が言及されていることがわかります。
私のバージョン (5.5.24) では、次のようなクエリを記述した場合:

sele/*ops*/ct name from tableName

次のエラーが表示されます。

You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'sele/*ops*/ct name from
tableName' at line 1

しかし、これを次のように変更すると:

select na/*ops*/me from tableName

あなたはこれを得るでしょう:

Unknown column 'na' in 'field list'

フィールド名の残りの部分をコメントしていると思います。しかし、次のようにクエリを記述すれば、問題なく動作します。

select name/*ops*/ from tableName
于 2013-03-22T23:01:13.217 に答える