2012-02-10 12 views
1

私はPHP5サーバ上で動作する必要があるphp4サイトを継承しましたが、私はほとんどの問題を解決しましたが、ここで何をしようとしているのか分かりません。まあ、正確に言えば、彼は提出されたテキストを引用するつもりだったが、私はこの関数がどのように動作するはずで、PHP5でどうすればよいのか分からない。デフォルトのPHP4によって引用符をエスケープする - PHP4からPHP5に移動

# Function to safely add slashes when magic quotes is switched off 

function safe_slash($string) 
{ 
    if (!get_magic_quotes_gpc()) 
    { 
    $string = addslashes($string); 
    } 

    return $string; 
} 
+0

'get_magic_quotes_gpc'がオフの場合、コードは' $ string'にスラッシュを追加しています....同じコードがPHP5で実行されます... [addSlashes()を読む](http://www.php.net/ manual/en/function.addslashes.php) – ManseUK

+0

あなたはこのコードに何か問題があることを意味します。 **それは何ですか**? –

+0

申し訳ありませんが、スラッシュが文字列に追加されないため、O'Learyのような名前を持つと 'がエスケープされず、クエリが失敗します。 – deep64blue

答えて

2

は、php.iniのオプションは、それ意志addslashesすべて$_POST/$_GET変数に、magic_quotes_gpcと呼ばれるになっています。

それはそれは$文字列へaddslashesが渡されます場合、値のmagic_quotes_gpcのは、オフになっていれば、コードは単純にチェックします。

それはPHP4とPHP5で動作するはずです(PHP6のmagic_quotes_gpcの中でIを削除しようとしています信じて)。それにも頼ることは推奨されていませんが、当初はSQLインジェクションに対して「保護」していましたが、不十分であることが判明しました。

+0

ありがとう - どういう風に推薦されますか?mysqli_real_escape_string ? – deep64blue

+0

mysqli_real_escape_stringは魔法の引用に頼っている点では確かに改善された方法がいくつかありますが、さらに大きな改善点はプリペアドステートメントやパラメータ化されたクエリを使用することです(例えば[PDO](http://www.php。 net/manual/en/class.pdo.php))ので、自分で文字列をエスケープする心配はありません。 – pjumble

-1
$_POST = self::addSlashesRecursive($_POST); 
$_GET = self::addSlashesRecursive($_GET); 
$_COOKIE = self::addSlashesRecursive($_COOKIE); 

function addSlashesRecursive($s) 
{ 
    if (get_magic_quotes_gpc()) { 
     return $s; 
    } 
    if (is_string($s)) { 
     return addslashes($s); 
    } else if (is_array($s)) { 
     return array_map(array('addSlashesRecursive'), $s); 
    } 
    return $s; 
} 

しかし、私の考えでは、コードを変更する方が良いでしょう。 PHP6では、magic_quotesはまったく削除されます。

関連する問題