簡単な質問:ユーザーがフィールドで "union select"を入力し、それをクエリのパラメータとして送信すると、mysqlはエラーを出さないように。mysql "union select"注入からの保護方法
"union select"が入力されているか、mysqlエラーが発生する可能性のある他のキーワードがあるかどうかを確認してください。
ここで私は今使用してSQL保護機能です:どちらか一方
where column1 like '%$user_input%'
簡単な質問:ユーザーがフィールドで "union select"を入力し、それをクエリのパラメータとして送信すると、mysqlはエラーを出さないように。mysql "union select"注入からの保護方法
"union select"が入力されているか、mysqlエラーが発生する可能性のある他のキーワードがあるかどうかを確認してください。
ここで私は今使用してSQL保護機能です:どちらか一方
where column1 like '%$user_input%'
あなたは二つのこと
が必要PDO、不要にチェックを使用します。クエリはそれで何か似てい
function sql_protect(&$n){
$n=stripslashes($n);
$n=mysql_real_escape_string($n);
$dntwant = array("\'","\\", "/","\"",")","(","<",">","\\r\\n",";","*","%");
$n = str_replace($dntwant,"", $n);
}
PDOはすべてを行います。
または使用:
$var = mysql_real_escape_string($_POST['var']);
$query = "SELECT * FROM test WHERE var = '$var' ";
// ^^These single quotes are vital!!
これは、あなたが、やるにstripslashes、およびstr_replaceを忘れるために必要なすべてのです。あなたが動的なデータベース/テーブル/カラム名を使用したい、またはあなたがlimit
句の番号を挿入したい場合は、可能
は mysql_real_escape_stringのが動作しません警告しました。どちらもPDOにはなりません。
事前に承認されたホワイトリストに対して入力しようとしている入力を確認する以外は機能しません。
それを行う方法については、この質問を参照してください:How to prevent SQL injection with dynamic tablenames?
は、クエリを準備し、実行してみてください:
$stmt = $db->prepare("SELECT * FROM test WHERE column1 LIKE ?");
$stmt->execute(array("%{$user_input}%"));
は、それがパラメータ化クエリのですか? – Randy
なぜ 'mysql_real_escape_string()'だけではないのですか?あなたの 'str_replace()'はmysql_real_escape_string()によって行われた何かを元に戻す危険があります。 – Wiseguy
独自の 'SQL protect'関数を作成しないでください。 mysql_real_escape_stringは正常です。あなたはどのようにあなたのセレクトをしますか?ユーザーの文字列は常に ''になっていますので、組合選択は問題ありません。SELECT * FROM table WHERE field = 'a union select x'' – Konerak