Neden PHP _GET yanlış çizgi çözer nedir?

3 Cevap php

Bugün ben belgelerinde için uygun bir açıklama bulmak başarısız PHP, bazı gariplik çalıştırmak. Aşağıdaki kodu göz önünde bulundurun:

<?php
echo $_GET['t']. PHP_EOL;
?>

Kod basit - bu url tek bir t parametresi alır ve geri verir. ? Yani test.php ile aramak eğer t =% 5Ca (% 5c '\' olan), ben görmek bekleniyor:

\a

Ancak, bu ne var:

$ curl http://localhost/~boaz/test.php?t=%5Ca
\\a

Çift yırtmaç dikkat edin. Herkes gidiyor ve bu URL üzerinde sağlanan gibi dizeleri almak için reçete vermek ne anlatıyor olabilir?

Thanks, Boaz

PS. PHP 5.2.11 kullanıyorum

3 Cevap

Php.ini de anahtarı açık "sihirli tırnak" var, çünkü bu, olur. Manuel:

When on, all ' (single-quote), " (double quote), \ (backslash) and NULL characters are escaped with a backslash automatically. This is identical to what addslashes() does.

Burada bu konuda daha fazla bilgi: http://php.net/manual/en/security.magicquotes.php

Lütfen komut php.ini ayarını "magic_quotes_gpc" herhangi bir değerinin farkında yapmak için, bu gibi komut dosyası yazabilirsiniz:

$d = $_GET["d"];
if (get_magic_quotes_gpc()) $d = stripslashes($d);
echo $d; //but now you are kind of vulnerable to SQL injections
         //if you don't properly escape this value in SQL queries.

açık. htaccess dosyası ve bunun gibi bir şey koymak

php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off 

Kolayca strip_slashes () işlevini kullanarak bu çözebilirsiniz. Sen sihirli tırnak kaçınmalısınız; güvenlik sebeplerinden dolayı önerilmemektedir oldum.