neden sadece mysql için html kişilere tırnak dönüştürmek php değil mi?

6 Cevap php

PHP varsayılan olarak "sihirli tırnak" kullanır ama bunun için çokça aldı. Ben PHP sonraki sürümde bunu devre dışı bırakır anlıyorum.

Buna karşı argümanlar mantıklı olsa da, ne ben neden sadece yerine bölü sıyırma ve kaldırma tırnak temsil HTML varlıkları kullanmak değil alamadım? Sonuçta, mySQL büyük bir çoğunluğu web tarayıcıları için çıkış için kullanılır?

Örneğin, ' yerine 'kullanılan ve bu tüm veritabanını etkilemez.

PHP sadece yapılandırmaları bu etiketi PHP ile her sürümü için kurdunuz değil neden başka bir soru,

Sadece merak. :)

6 Cevap

Burada iyi bir nedeni çoğunlukla kendi yayınlanmıştır cevap karşısında, var: htmlspecialchars() veya htmlentities() does not . That's what mysql_real_escape_string() olan SQL sorgu güvenli hale kullanma için.

Bunu bir sorun teşkil sadece tek ve çift tırnak karakteri olduğunu varsayımını yapmak gibi görünüyor. MySQL sorgular aslında \x00, \n, \r, \, ', {[(savunmasız 5)]} ve veri \x1a karakter. Eğer hazır deyimleri veya mysql_real_escape_string() kullanmıyorsanız, o zaman bir SQL enjeksiyon açığı var.

htmlspecialchars() ve htmlentities() bu karakterlerin hepsi, bu fonksiyonları kullanarak sorgu güvenli yapamaz ergo dönüştürmek yoktur. Bu amaçla, addslashes() ya sorgu güvenli yapmaz!

Diğer küçük olumsuzlukları diğer posterleri zaten {[(0)}], web içeriği için kullanılan, yanı sıra birini düşünün (verilerinizin için gerekli depolama ve dizin alan miktarını artırarak olduğu gerçeği olmama MySQL hakkında belirttiğim şeyler de var; Onun varlık formunda depolama için altı veya daha fazla bayt) karşı bir tırnak karakteri için depolama bayt.

Eğer veritabanı içeriği kullanan bütün bir web sayfası çıktısı ise bir veritabanında bir dize sütuna ' koymak, iyi olurdu. Ama bu doğru değil.

Bu size çıkış anda çıkış kaçmak için iyidir. Değil bir günlük dosyası, e-posta, ya da başka bir hedef - Bu çıkış bir web sayfasına gidiyor emin için bildiğiniz tek zaman.

PS: PHP zaten standart php.ini dosyasında varsayılan olarak sihirli tırnak kapatır. PHP 5.3 önerilmemektedir ve PHP 6.0 tamamen dilden silinecektir.

Ben ilk soruya tek cevap verecektir.

O kullanılan nerede sorun, önemli girdi değil çünkü Doğrulama input, yine de yanlış bir yaklaşımdır. PHP MySQL sorgusuna tüm giriş bir HTML varlık mantıklı olur bir bağlamda çıkış olacağını kabul edemeyiz.

Bu magic_quotes gidiyor olduğunu görmek güzel; PHP ile güvenlik konularında bir çok nedeni var ve bu onlara yeni bir yaklaşım görmek güzel :)

Eğer OUTPUT'a doğrulamak için doğrulama yaklaşımlar reframe eğer programcı olarak, bu biliyorsunuz, Yalnızca sizin içeri çalışıyoruz bağlamında için, kendinize büyük bir iyilik yapacağım.

MySQL ' ' olduğunu dönüştürmek gelmez nedeni ' is not '. Eğer çıkış için verileri dönüştürmek istiyorsanız, size değil, sizin veritabanında, görünüm katmanında yapıyor olmalıdır. Echo zaman önce / Sadece çağrı htmlentities çok da zor değil.

Herkese teşekkürler. Ben gerçekten ben bunun yerine onlara eğik çizgi ekleyerek HTML kuruluşlara tırnak değiştirin ama yine, bu aslında çok çıkışı / girişi değiştirme değilse o olabilir ne demek ve etkileri düşünmek zorunda?

Biz ya da sürece biz açıkça tüm verileri HTML varlıkları kullanılarak kodlanmış olduğundan yapmak gibi mySQL için HTML varlıklarını kullanın OLMAMALI DEĞİL CAN bir neden düşünemiyorum. Sonuçta, benim argüman 'Yani, kodlamak için aslında GÜVENLİ değildir. Ve "ve / ciddiye mySQL veritabanları zarar verebilir' mySQL çoğunluğu da gerçeği HTML tarayıcılar için çıkış ve için kullanılan bir gerçeği dayanır ve "ve / INSERT sorguları olarak göndermeden önce HTML varlıklar olarak? Ayrıca, XML gidiyoruz öyleyse neden ZATEN HTML işletmelerdeki kodlanmış bulunuyor verilerine erişirken htmlentitiesi ve stripslashes ve addslashes yazma atık zaman?

Sadece ' ' dönüştürmek olamaz. Bir düşünün: Eğer dize saklamak istediğinizde ne "'" olur? Eğer sayfayı yüklediğinizde ' o ' görüntüler değil ' saklayın.

Yani şimdi ALL HTML varlıkları değil, sadece tırnak dönüştürmek zorunda. Sonra garip dönüşüm sorunları her türlü içine almaya başlar. Basit çözüm sadece store the real data veritabanında, o zaman sizin gibi nasıl görüntüleyebilirsiniz etmektir. Çoğu durumda " ve ' etiketi parantez dışında herhangi bir zarar yok - Sen gerçek tırnak kullanmak isteyebilirsiniz.

Bazen bir alanda gerçek HTML depolamak ve görüntülemek isteyebilirsiniz çiğ (sürece giriş / çıkış yolunda kontrol ve dezenfekte ediyor gibi.