(Magic_quotes kullanarak yapar) mysql_real_escape_string kullanımını etkiler ()

4 Cevap php

I magic_quotes açık var ve ben mysql_real_escape_string kullanırsanız, dizge çift kaçtı olacak? Sorunlara neden olur?

Ben bu yüzden get_magic_quotes() fonksiyonu ama sadece onay arayan tabanlı varsayalım.

(PS Biz yerinde olan tüm güvenlik ofisimde test daha bu soruyu sormak için kolay - Bu kullanışlı bir ortam olsun her şeyi yapılandırmak için bana 10-15 sürer)

4 Cevap

Eğer get / post / çerez girişinden elde edilen bir değer kaçış, zaten addslashes() applied to it, so passing it through mysql_real_escape_string() olacak aslında, çift tırnak olacak.

Em şerit:

if (get_magic_quotes_gpc())
{
    $_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);
    ini_set('magic_quotes_gpc', 0);
}

This question korkunç magic_quotes_gpc PHP'nin 'özelliği' ile uğraşan / tırnak soyulması için diğer bazı seçenekleri vardır.

Of course, the easiest way is to turn magic_quotes off.
wuth usual PHP/Apache config, this line

php_flag magic_quotes_gpc 0

.htaccess dosyasındaki şeyi yapacağız.

ancak uyumluluk amacıyla, bir fonksiyon da bazı yapılandırma dosyasında kullanılabilir.

if ( get_magic_quotes_gpc( ) ) {
  $_GET = array_map_recursive('stripslashes', $_GET) ;
  $_POST = array_map_recursive('stripslashes', $_POST) ;
  $_COOKIE = array_map_recursive('stripslashes', $_COOKIE) ;
  $_REQUEST = array_map_recursive('stripslashes', $_REQUEST) ;
  if (isset($_SERVER['PHP_AUTH_USER'])) stripslashes($_SERVER['PHP_AUTH_USER']); 
  if (isset($_SERVER['PHP_AUTH_PW'])) stripslashes($_SERVER['PHP_AUTH_PW']);
}

en kolay

If I have magic_quotes switched on and I use mysql_real_escape_string, will the tring be double escaped?

Evet, ama olsa böyle bir şey yapabileceğini olacaktır:

if (get_magic_quotes_gpc())
{
  $escaped = stripslashes($your_vars);
}

Note: Sen PHP.ini gelen sihirli tırnak devre dışı bırakmak ya da geçersiz kılmak için aşağıdaki işlevini kullanabilirsiniz:

// no more magic quotes
function get_magic_quotes_gpc()
{ 
  return false;
}