|
|
Webcity.pl | Krótkie porady
Magic quotes
Autor: Zyx
|
Aby uchronić się przed atakami typu SQL Injection, wystarczy wstawiać do danych z formularzy, adresów URL i ciastek backslashe. PHP posiada mechanizmy zwane Magic Quotes ("magiczne cytaty"), które potrafią robić to automatycznie. Mogą być one jednak wyłączone i jeżeli nie uwzględnimy ich ustawień, narazimy się albo na niebezpieczeństwo, albo na to, że backslashy będzie za dużo i efekt nie będzie prezentował się okazale (szczególnie w artykułach).
Magic quotes to w rzeczywistości dwie opcje:
magic_quotes_qpc - czy dodawać backslashe do danych z formularzy (POST), adresów URL (GET) i ciastek (COOKIE).
magic_quotes_runtime - czy dodawać backslashe do danych pobieranych z bazy.
Drugą opcję można spokojnie wyłączyć funkcją set_magic_quotes_runtime(0). Pierwsza natomiast uruchamiana jest jeszcze przed startem skryptu i możemy co najwyżej zniwelować jej efekty. Zazwyczaj polecane jest pisanie skryptów pod włączone magic quotes qpc, gdyż nie trzeba wtedy wewnątrz nich umieszczać funkcji typu mysql_real_escape_string(), czy addslashes(). Gdyby jednak ten był wyłączony na serwerze, możemy zasymulować jego obecność:
function add_gpc(&$value){
if(is_array($value)){
return array_map('add_gpc', $value);
}else{
return mysql_real_escape_string($value);
}
} // end add_gpc();
if(!get_magic_quotes_gpc()){
$_POST = array_map('add_gpc', $_POST);
$_GET = array_map('add_gpc', $_GET);
$_COOKIE = array_map('add_gpc', $_COOKIE);
} |
Gdybyśmy pisali skrypt pod wyłączone magic quotes, musielibyśmy w tym przykładzie usunąć znak negacji sprzed get_magic_quotes_gpc() oraz zamienić mysql_real_escape_string na stripslashes. |
Powrót |
|
|