3

プロジェクトを監査していて、クエリにデータを挿入する方法を見つけました。このプロジェクトは Hibernate を使用し、このコード部分Session.createSqlQuery().list()

SQL は次のようなものです: " SELECT * FROM tablename ORDER BY column XXXXXX"

XXXXXXFiddler を使用して変更できます。だから私は試しました

SELECT * FROM tablename ORDER BY column DESC; truncate table tablename;

残念ながら(私の注射の試みのみ)それは機能せず、私は得ています:

SQL 構文にエラーがあります。「truncate table tablename」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

私の質問は、彼らは createSQLQuery を使用しているので、インジェクションから安全かということです。そうでない場合は、問題を強調するための例を教えてください。

たとえば、以前のクエリ文字を削除できると思って %08 (バックスペース文字) を使用してみました (うまくいきませんでした;))

ありがとう。


いくつかの調査の結果、このセキュリティホールでデータを変更できないようですが、使用ORDER BY (CASE WHEN ...)するとテーブルとデータを「スキャン」できます。

4

1 に答える 1

0

パラメータ化されたステートメントを使用して列名が指定されていますか、それともテキストを連結しているだけですか?

例: perl::DBI では、ドライバーは次の構文をサポートします。

$dbh->do("SELECt * FROM asdf ORDER BY ?", undef, $order_by);

? 入力を自動的にサニタイズするパラメータ化されたステートメントの形式があります。

于 2013-10-18T05:20:33.527 に答える