------------------------------------------------ -------------------------------------------------- --
たとえば、次のログイン コード:
if($l = @mysql_connect('localhost', 'root', '123')) または die('データベース接続に失敗しました');
mysql_select_db('テスト');
mysql_set_charset('utf8');
$sql = 'ユーザー名 = "$username" およびパスワード = "$password" のテストから * を選択';
$res = mysql_query($sql);
if(mysql_num_rows($res)){
ヘッダー('場所:./home.php');
}その他{
die('間違った入力');
}
----------------------------@chenwei 黑目の詩人
上記の SQL ステートメントには大きなセキュリティ リスクがあるため、次のユニバーサル パスワードとユニバーサル ユーザー名を使用すると、簡単にページにアクセスできます。
1. $sql = 'select * from test where username = "***" andpassword = "***" or 1 = "1"';明らかに、この SQL ステートメントのユニバーサル パスワードは次のとおりです: ***" または 1 = "1
2. $sql = 'select * from test where username ="***" Union select * from users/* andpassword = "***"';
スラッシュ * は、以下が実行されないことを意味します。MySQL はユニオン クエリをサポートしているため、すべてのデータを直接クエリできます。そのため、この SQL ステートメントのユニバーサル ユーザー名は次のとおりです: ***" Union select * from users/*
ただし、このインジェクションは、 if $sql = "select * from test where username = $username andpassword = $password";
の場合、コード内の SQL ステートメントのみをターゲットにします。
少なくとも上記の注入は機能しなくなりましたが、方法は同じです;PDO を使用した後は、SQL インジェクションを完全に回避できます。急速な開発とフレームワークが蔓延するこの時代では、SQL インジェクションについて深く考える必要はありません。
------------------------------------------------- -------------------------------------------------- -