0

私は常にデータベースで ORM レイヤーを使用しているので、SQL インジェクションについては気にしませんが、友人からこのタスクを与えられましたが、まだ解決方法がわかりません。

PHPスクリプトは、クエリの戻り値が != null (入力されたユーザー名とパスワードに一致するユーザー名が見つかった) であるかどうかをチェックするだけであることを知っています。

PHP でのクエリ自体は次のようになります。

$sql = "SELECT name FROM users WHERE name='".$name. "' AND password='".$password. "'"; 

このクエリの戻り値をアーカイブする最良の方法は何ですか!= null または有効なログイン データ (ユーザー名とパスワード) を取得します。パスワードはデータベースに平文で保存されます。プレーンに保存するのが悪いことは知っていますが、PDO を使用するのが良いことは知っていますが、彼がくれたこの面白いタスクを解決する方法がわかりません。おそらく、私は常に PDO を使用しているためです。

4

2 に答える 2

3

次の 2 つの入力変数があるとします。

$name = "iam";
$password = "aninjection";

このクエリの結果は次のとおりです。

$sql = "SELECT name FROM users WHERE name='iam' AND password='aninjection'"; 

$passwordそして、これを変数に追加するとしましょう:

$password = "aninjection' OR 1='1";

結果は次のとおりです。

$sql = "SELECT name FROM users WHERE name='iam' AND password='aninjection' OR 1='1'"; 

このクエリによりtrue、ユーザー テーブルのすべての名前が返され、表示されます。もちろんこれは基本的な例です。テーブル全体を削除することで、さらに害を及ぼすこともできます。

于 2016-01-28T14:59:16.823 に答える