0

このクエリが何をするのか理解したいのですが。

次のクエリの意味を誰かが言葉で説明できますか?

http://www.kachakil.com/pista.aspx?id_pista=1 

and exists (select * from contrasena) and 100 > 

(select count(*) from information_schema.columns, information_schema.columns T1, 
information_schema T2)   

上記のクエリは、このペーパーで言及されています:重いクエリを使用した時間ベースのブラインドSQLインジェクション(作成者:Chema Alonso ...)

私はすべてのコードの意味を理解しようとしています。誰かが私を助けてくれることを願っています。

1)URLは次のとおりです。

http://www.kachakil.com/pista.aspx?id_pista=1

2)この時点で私は立ち往生しています(もちろん、contrasenaからselect *の意味を知っています(おそらくcontrasenaはテーブルなので、テーブルcontrasenaからすべてのレコードを選択します)。しかし、残りはサブクエリですが、意味がわからない

and exists (select * from contrasena) and 100 >

columns 3)これは、データベースに属すると呼ばれるテーブルにあるレコードの数をカウントすることを目的とした選択ですinformation_schema。また、テーブルの名前が次のcolumnsように変更されましたT1。これはどういう意味ですか?:information_schema T2

質問をお詫びします...誰かが私を助けてくれることを願っています..どうもありがとう

4

1 に答える 1

1

でクエリを開始することはできないandため、おそらくこれはクエリの一部です。構文は、リンクからSQLクエリを付加することを意味する場合があります。

exists (select * from contrasena)テーブルcontrasenaにレコードがある場合はtrueです。

select count(*) from information_schema.columns, information_schema.columns T1, information_schema T2information_schemaはテーブルではないため、私の知る限り有効な構文ではありません。

代わりに上記のはずだと思いますselect count(*) from information_schema.columns, information_schema.columns T1tableA, tableBを意味します。したがって、とtableA CROSS JOIN tableBからのレコードの組み合わせごとにレコードが生成されます。データベース内の各列(各テーブル内)のレコードを含むテーブルであり、その列を記述します。したがって、サブクエリは基本的にデータベース内の列数の2乗を返します。それで:tableAtableBinformation_schema.columns

100 > (select count(*) from ...)
=> 100 > DB_COL_COUNT^2 (not valid SQL)
=> 10^2 > DB_COL_COUNT^2 (not valid SQL)
=> 10 > DB_COL_COUNT (not valid SQL)
=> 10 > (select count(*) from information_schema.columns)

最初の行は、意味の点では最後の行と同等ですが、実行時間ではありません。

したがって100 > ...、データベースの行数が10未満の場合、trueを返します。

間にあるandsは、すべての条件が真でなければならないことを単に意味します。

于 2013-01-27T12:24:46.373 に答える