0

このチュートリアルによると: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php 以下のコードは、SQL インジェクションを示します。

<?php
// a good user's name
$name = "timmy"; 
$query = "SELECT * FROM customers WHERE username = '$name'";
echo "Normal: " . $query . "<br />";

// user input that uses SQL Injection
$name_bad = "' OR 1'"; 

// our MySQL query builder, however, not a very safe one
$query_bad = "SELECT * FROM customers WHERE username = '$name_bad'";

// display what the new query will look like, with injection
echo "Injection: " . $query_bad;

フロントエンドでは、次のように表示されます。 Injection: SELECT * FROM customers WHERE username = '' OR 1''

phpmyadmin->sql でテストを行ったところ、以下のコードを実行しました。

SELECT * FROM users WHERE fname = '' OR 1''

そしてそれは示しています:

#1064 - 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 ''' LIMIT 0, 30' at line 1

質問:

テーブル内のすべてのエントリが表示されるはず"users"ですが、そうではないのはなぜですか? SQL インジェクションのデモンストレーションをしたいのですが、どうすればいいですか?

4

2 に答える 2

1

より典型的な SQL インジェクションは次のようになります$name_bad = "' OR 1=1 -- ";。これにより、次の SQL が生成されます。

SELECT * FROM customers WHERE username = '' OR 1=1 -- '
于 2013-07-29T09:54:01.957 に答える
0
SELECT * FROM users WHERE fname = '' OR 1 = 1

おそらく彼らが意味したものです

見たばかりの編集

SELECT * FROM users WHERE fname = '' OR 1 

1 は true と評価されるため、その後の '' を削除するだけです

また、そのリンクは古くなっています。代わりに mysqli または pdo を見てください。

于 2013-07-29T09:53:49.533 に答える