PHP'nin son sürümü varsayılan bir çizgi ("\") ekler?

5 Cevap php

Ben yazarken

input data, hel'l"lo

print_r($_POST) displayhel\'\"lo

ve ben kullandığınızda

if(get_magic_quotes_gpc()){ 
    mysql_real_escape_string($_POST); 

display

hel\\\'\\\"lo

PHP otomatik bölü ekler, çünkü kullanmak gereklidir mysql_real_escape_string?

5 Cevap

Hayır, itibaren sürüm 5.3 'ten, varsayılan olarak eklenen hiç bölü çizgisi olacaktır. Ayrıca, addslashes mysql_real_escape_string için not yerine olduğuna dikkat ediniz; Eğer bu konuda daha fazla okuyabilirsiniz here.

magic_quotes_gpc php 5.3 de seçeneği önerilmiyor

Bu mysql_real_escape_string kullanmak gereklidir?

Evet. Ama not $_POST veya $_GET üzerine bir battaniye kodlama olarak. O yanlış bir şey olduğunu ve beklenmeyen ve istenmeyen şekillerde dizeleri cendereye olacak, giriş aşamasında, bir çıkış aşaması öncelemeli mekanizmasının uygulanması oluyor.

Eğer başka bir bağlam içine dize eklemek ana kadar ham formu up dizeleri tutmalı. that, sadece gelin, size uygun kaçan işlevini kullanın. MySQL ile:

$query= "SELECT * FROM items WHERE title='"+mysql_real_escape_string($_POST['title'])+"'";

ya da HTML ile:

<p>Title: <?php echo(htmlspecialchars($_POST['title'])) ?></p>

I've recently used an hosting with PHP 5.3.6 with the option "magic_quotes_gpc" enabled. Unfortunately it's a shared hosting so I could not change the config (Also "php_flag magic_quotes_gpc Off" to .htaccess failed).

Benim için çalışmış bir kod düzeyinde çözüm başında bu yerleştirerek edildi

if (get_magic_quotes_gpc() === 1)
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}

Burada çok görmek

http://php.net/manual/en/security.magicquotes.disabling.php

dürüst internette bulunan sihirli çözüm

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}