Dürüst olmak gerekirse, ben bu fonksiyonun yazarı hiçbir enjeksiyonları ne XSS ve SQL fikir ya da tam olarak ne kullanılan fonksiyon ya yok olduğunu düşünüyorum.
Sadece iki tuhaflıklar isim:
Ayrıca: Genel olarak, XSS agains korumak fonksiyonları tersi agains SQL enjeksiyonları korumak ve uygun değildir. Çünkü dikkat edilmesi gereken kendi özel karakterler hast her dil ve bağlam.
Benim tavsiyem neden ve nasıl kod enjeksiyon mümkündür ve nasıl karşı korumak için öğrenmektir. Çalıştığınız dilleri, özellikle özel karakterleri ve bunların nasıl kaçmak için öğrenin.
Edit İşte bazı (belki garip) bir örnek: Eğer giriş için kullanıcıların bir {bazı JavaScript kodu kullanmak bir URI bir yol segmenti olarak kullanılması gereken bazı değer izin düşünün [(1)] } değerini bağlıyor. Yani dil bağlamı, bu gibi görünüyor:
Ve daha eğlenceli hale getirmek için: Bir veritabanında bu giriş değerini depolamak.
Şimdi veritabanına doğru bu giriş değerini saklamak için, sadece sizin veritabanı dili (yani SQL) içine değeri eklemek üzeresiniz bağlam için uygun bir kodlama kullanmanız gerekir; kalan (henüz) fark etmez. Bir SQL dizesi beyanı içine eklemek istediğiniz beri, içeriksel özel karakterler bu içeriği değiştirmek için izin karakterlerdir. Dize gelince bu karakterler (özellikle) "
, '
vardır Beyannameleri ve kaçtı gereken \
karakter. Ama önceden hazırlanmış ifadeler sizin için tüm bu çalışmaları yapmak, bu yüzden onları kullanmak belirtti.
Şimdi veritabanında bir değere sahip olduğunu, biz doğru çıktı onları istiyoruz. Burada dış bağlamına en içteki devam etmek ve her bağlamda uygun kodlama uygulanır:
Birlikte Şimdi her şey:
'… onclick="'.htmlspecialchars('window.open("http://example.com/'.json_encode(rawurlencode($row['user-input'])).'")').'" …'
$row['user-input']
Şimdi eğer "bar/baz"
çıktı:
… onclick="window.open("http://example.com/"%22bar%2Fbaz%22"")" …
Ancak bu bağlamlarda bütün bu işlevini kullanarak hiçbir overkill. Bağlamlarda benzer özel karakterleri sahip olsa da, farklı kaçış dizilerini var çünkü. URI sözde yüzde kodlama vardır, JavaScript \"
gibi kaçış dizileri vardır ve HTML "
gibi karakter referansları vardır. Ve sadece tek bu fonksiyonların kullanarak değil bağlamı kırmak için sağlayacaktır.