• 15-04-2009, 12:47:24
    #1
    Üyeliği durduruldu
    php nin özelliklerinden birisi php.ini de
    magic_quotes_gpc = On
    şeklinde ifade açık ise get post request ve cookie değişkenlerine addslashes işlemini otomatik uygulamasıdır.

    Bu yerine göre istenmeyen bir özellik durumundadir.

    Sırası ile php sayfalarında şu işlemler yapılarak bu sorun kökten çözülebilir.

    bu addslashes işlemini php bu değişkenlerin tüm elemanlarına uyguladığı için. matris ve türevi dizi oluşabileceginden bu işlemi tersine alan stripslashes işlemini array_map ile kullanmak en pratik çözümdür.

    Adım adım çözüme geçecek olursak;

    tüm sayfalarda kullandığınız ayarlar.php config.php yada lib.php gibi bir dosyaya ilk önce aşağıdaki fonksiyonu dahil ettikten sonra
    //Strip slashes islemleri
    if (get_magic_quotes_gpc()) {
        function stripslashes_deep($value)
        {
            $value = is_array($value) ?
                        array_map('stripslashes_deep', $value) :
                        stripslashes($value);
    
            return $value;
        }
    
        $_POST = array_map('stripslashes_deep', $_POST);
        $_GET = array_map('stripslashes_deep', $_GET);
        $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
        $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
    }
    veritabanı na giriş yada güncelleme yaptiginiz alanların değerlerini yazdirirken

    mysql_real_escape_string

    ifadesini kullanın
    örnek olarak

    $result = mysql_query("insert into tablo (alan) values('".mysql_real_escape_string($deger)."')");
    Böylelikle ömrünüz boyunca artik tek tırnak ve çift tırnak ile ilgili problem yaşamazsınız
  • 15-04-2009, 13:10:37
    #2
    Üyeliği durduruldu
    mysql_real_escape_string Mysql baglantisi olmadiginda hata veriyor. Onun yerine addslashes oneririm
  • 15-04-2009, 13:17:37
    #3
    Üyeliği durduruldu
    MrHades adlı üyeden alıntı: mesajı görüntüle
    mysql_real_escape_string Mysql baglantisi olmadiginda hata veriyor. Onun yerine addslashes oneririm
    addslashes yapip birde stripslashes mi yapacaksiniz? ayreten Veritabanı baglantiis yoksa zaten mysql e veri kaydetmiyorsaniz kayıtla bir işiniz olmamis olmaz mı
  • 15-04-2009, 14:55:07
    #4
    Teşekkürler üstad.. Alıyorum bir kenara bu dersini..
  • 21-04-2009, 11:19:55
    #5
    Ben de çok teşekkür ediyorum.
    Ayrıca bu konuyu kendi siteme işlemeye başlayacağım. Uygulama yaptığımda sorunlarımı buraya taşırım izninizle.
  • 21-04-2009, 11:57:16
    #6
    şunlar tam olarak ne diye geçiyor acaba

    “ &#8220 left double quotation mark
    ” &#8221 right double quotation mark

    real escape addslashes str_replace htmlentities htmlspecialchars hiçbiri işe yaramıyor ve veritabanı işlemlerinde kaydı durduruyor (normal tırnak muamelesi görüyor)
  • 21-04-2009, 13:30:08
    #7
    Üyeliği durduruldu
    niphell adlı üyeden alıntı: mesajı görüntüle
    şunlar tam olarak ne diye geçiyor acaba
    “ “ left double quotation mark
    ” ” right double quotation mark
    real escape addslashes str_replace htmlentities htmlspecialchars hiçbiri işe yaramıyor ve veritabanı işlemlerinde kaydı durduruyor (normal tırnak muamelesi görüyor)
    ereg() ile [A-z0-9_-] kontrolü yaparsanız ondanda kurtulursunuz.
  • 21-04-2009, 14:18:15
    #8
    MrHades adlı üyeden alıntı: mesajı görüntüle
    ereg() ile [A-z0-9_-] kontrolü yaparsanız ondanda kurtulursunuz.
    haklısın ama bu durumda bütün noktalama işaretlerindende mahrum kalmazmıyım?
  • 21-04-2009, 14:26:17
    #9
    Üyeliği durduruldu
    niphell adlı üyeden alıntı: mesajı görüntüle
    haklısın ama bu durumda bütün noktalama işaretlerindende mahrum kalmazmıyım?
    Yazılımda 2 tür mantık vardır;

    1-) Tüm herşeye izin verip sadece kötüleri engellemek.
    2-) Tüm hereşeye izin vermeyip sadece güvenirlere geçit vermek.

    Ben her zaman 2. yolu kullanırım. Şuan sizin söylediğiniz 1. yoldan gitmek isteme çabanız. Bence izin verilicek karakter sınıflarınızı belirleyin hepsini tek tek belirtin. Böylese ne stripslashes 'a ne addslashes'a nede htmlspecialchars v.s gibi fonksiyonlara ihtiyacınız olur.