Neden kabul kötü bir uygulama üzerinde magic_quotes_gpc dönüyor?

5 Cevap php

Neden PHP magic_quotes_gpc üzerinde dönüyor kötü bir uygulama olarak kabul edilir?

5 Cevap

Ben onu (o sayfada takip yorum ile) PHP kendisi yapımcıları daha iyi açıklayabilir sanmıyorum: Why not to use Magic Quotes

  • Taşınabilirlik: o olmak varsayarsak, ya da kapalı, taşınabilirlik etkiler. get_magic_quotes_gpc() buna göre bu kontrol ve kod için kullanın.
  • Performans: kaçan her veri parçası bir veritabanına eklenen Çünkü, tüm bu verileri kaçan bir performans kaybı var. Sadece zamanında ({[) (0]}) gibi kaçan işlevleri çağıran daha verimlidir. Php.ini-development bu yönergeleri öntanımlı sağlasa php.ini-production bunu devre dışı bırakır. Bu öneri performans nedenlerden kaynaklanmaktadır.
  • Rahatsızlık: Tüm veri ihtiyaçları kaçan değil, çünkü o olmamalı kaçtı verileri görmek için sık sık sinir bozucu. Örneğin, bir formdan e-posta ve bir sürü \ 'görmek e-posta içinde. Bu durumu düzeltmek için stripslashes() aşırı kullanımını gerektirebilir.

Not - Bu özellik PHP 5.3.0 ÖNERİLMEMEKTEDİR ve PHP 5.4.0 itibariyle ÇIKARILDI olmuştur.

Makaleye göre What is Magic Quotes GPC (magic_quotes_gpc) in PHP and the php.ini?, bir çok dezavantajları vardır:

  • Form gönderimler tarayıcıya geri gönderilir Kılıfları stripslashes bir çağrı () elle çıkarılması bölü olmalıdır.
  • Sihirli tırnak hiç bu sunucu için kapatılır, ya da kod sihirli tırnak sizin komut başarısız olur etkin olmayan bir sunucuya taşınırsa. Ya da daha kötüsü, hemen başarısız ve sadece garip davranışlar sergilemez.
  • Sunulan değişkenler üzerinde herhangi bir string işlemleri, hatta basit ifadeleri dikkate içeriği çözgü bölü şansınız almalıdır 'if'.
  • Magic ırkları geliştirici sloppyness tırnak. SQL sorgusunun içine yerleştirilen değişkenleri kaçan (bence) bir geliştirici bilmek ve düşünmek gereken bir şeydir. Sadece her şeyi züppe olduğunu düşünmeyin.

Eğer daha güvenli kod yazmak için güçlerini onu terk çünkü.

Sayın O'Malley sitenize kayıt giderse, o zaman magic_quotes_gpc O \ 'Malley'in içine onun soyadını dönecek, ve veritabanına eklediğinizde, her şey yolunda gidecek.

Mutlaka veritabanı sistemi için kaçması gibi çalışmıyor - Sorun magic_quotes addslashes gelen, olduğunu. O'Malley işe yarayabilir, ancak o da bu kaçışa aşmak ve SQL enjeksiyon yapmak mümkün olabilir.

Magic_quotes değilseniz, o zaman dize O'Malley alırsınız, ve bu gibi bir SQL deyimi kıracak

INSERT INTO users (...) VALUES (...,'O'Malley',...)

Uyarı dize gerçekten O. sonra sonlandırılır

Ayrıca, güzel: Eğer, örneğin, onun adı ile bir e-posta göndermek için olsaydı, stripslashes olurdu - sebepsiz. Eğer yoksa Bay O \ 'Malley'in bir e-posta alırsınız.

SQL enjeksiyonu önlemek için en iyi yoldur çünkü (Elbette, gerçekten güvenli veritabanı işleme kodu için, sen, parametreli sorgular kullanmak isterdim. Ve parametreleyebilir eğer, yine eğik istemiyorum ve bu bir israf PHP eklemek için zamanı.)

Birileri bu seçenek anında uygulama güvenlik açıkları yüzlerce açılış, etkin olmayan bir sunucuya komut taşıyabilirsiniz çünkü. Ayrıca, çok sayıda sihirli tırnak sağlayan uygulama güvenli kıldığını düşünüyorum. Öyle değil. Hala uygulama içine gelen girdinin her parçasını incelemek ve doğrulamak gerekir. Eğer alıntı sorunları yoksa bile, hala vb cross site scripting sorunları olabilir

Özelliği rağmen gelecekteki PHP sürümlerinde kaldırılır ediliyor olması.

"Sihirli Tırnaklar" onlar daha iyi bilmiyordum, SQL enjeksiyonu ile ayaklarına ateş geliştiricileri önlemede el holdingde PHP'nin girişimi oldu. PHP 5.3 önerilmemektedir ve PHP 6 kaldırılacaktır.

Ben açık olması ve oldukça kaçış everything daha kaçtı gerekenleri kaçış ve veritabanında yer asla şeyler Unescape zorunda iyi olduğunu söylüyor. Sihirli tırnak daha iyi bilmeli halkı korumak amacıyla, çözer daha birçok (veya daha fazla) sorun yaratır.

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