0

私はいくつかの投稿変数を持っており、以下を実行します。

$input_name =  mysqli_real_escape_string($dbc, trim($_POST['input_name']));

挿入クエリが実行される前に、 $input_name などの変数をエコーするいくつかのテストを実行しました。エコーは、実際にエスケープされていることを示しています。

ただし、phpmyadmin にログインして DB のエントリを確認すると、エスケープする必要のある文字がエスケープされていないことがわかります。ここで問題がありますか?変数宣言とクエリの間で、私が認識していない何かが起こっていますか?

これに影響を与える可能性のあるphpまたはサーバー設定はありますか?

注: 私は PDO が進むべき道であることを理解しています。私はこの特定の瞬間にそこにいません。

4

2 に答える 2

1

エコーは、彼らが実際に彼らがそうあるべきように逃げていることを示しています。

これは、キャラクターがエスケープされていることを示しています。

phpmyadminにログインしてDB内のエントリを確認すると、エスケープする必要のある文字がそうではないことがわかります

エスケープしているということは、PHPではなく、それらの文字をそのままにしたり、データベースでそれらを区切り文字として内部的に取得したりすることを意味します。

そのまま入力したい場合'は、エスケープします。single quoteしたがって、database(mysql)がそれを検出すると、エスケープされているため、MySQLの文字列リテラルに使用されているとは見なされません。

エスケープしない場合、MySQLは2つの間のすべての部分'を文字列リテラルと見なします。

だから、すべてが大丈夫です、それについて心配しないでください。

于 2012-12-07T06:40:36.697 に答える
1

PHP の *_real_escape_string 関数は、SQL インジェクションを防止するためだけに存在するため、" を \" および ' を \' に変更するだけなので、次のクエリは次のようになります。

SELECT * FROM users WHERE pass = '' OR '1'='1 --

となります:

SELECT * FROM users WHERE pass = '\' OR \'1\'=\'1 --

注入された値が機能しないように。

于 2012-12-07T06:37:40.857 に答える