2011-11-01 13 views
1

私はこれらの魔法の引用について混乱しています。
は、彼らは私のサーバー上で有効になっている、と私の質問は、私のような関数を使用してそれらを を無効にする必要があります:私の入力をサニタイズするか、私はマジッククオートにすべての仕事をしておくべきですマジック引用符はSQLインジェクションに対して脆弱ですか?私はstripslashesを使用し、入力を消毒する必要がありますか?

if(get_magic_quotes_gpc()){ 
$username=stripslashes($username); 
$password=stripslashes($password); 
} 


私は(学習目的のために)いくつかのSQLインジェクションを練習しています。魔法の引用符がある場合 私は何もしませんが、上記のコードを使用するとSQLインジェクションができます。
だから私はこのような魔法の引用符や使用機能に固執する必要があります

if(get_magic_quotes_gpc()){ 
$username=stripslashes($username); 
$password=stripslashes($password); 
$cleanUsername=mysql_real_escape_string($username); 
$cleanPassword=mysql_real_escape_string($password); 
} 

私はいけないので、任意の助けを入力を消毒上の多くの経験が

+0

回避する必要のある唯一の機能SQLインジェクションはmysql_real_escape_string –

+0

のみですか? ...私がしなければならないことは、mysql_real_escape_stringを内部に持つ関数を作成して使用することです。 imをSQLで完全に保護しているかどうかわからない場合 – aygeta

+0

TrexXxで提案されているようにPDOを使用しない限り、mysql_real_escape_stringは必要な唯一の機能です(このサイトで関連する回答を探すことができない場合) SQLインジェクションからあなたを守る。 –

答えて

1

マジッククオートは廃止され、から削除されます:(してくださいことを持っていますPHPの次のバージョン(PHP 5.4)ですので、それらに頼るべきではありません。(http://www.php.net/manual/en/security.magicquotes.php)SQLインジェクションを防ぐ最も良い方法は、PDOとプリペアドステートメントを使用することです。詳細についてはhttp://fr2.php.net/manual/en/pdo.prepared-statements.phpを参照してください。

+0

MySQLを使用している場合は、古い「mysql」ドライバではなく、新しい「mysqli」ドライバを使用して接続します。後者は実際にプリペアドステートメントをサポートしないため、PDOはエスケープを使用してそれらをシミュレートする必要があります。 @ Furicaneのコメントには、その問題を説明するリンクが含まれています。 – Wyzard

関連する問題