Güvenli embed içeriğe izin nasıl?

5 Cevap php

Ben kendimi yazdım (sorta bir sosyal ağ gibi) bir web sitesi çalıştırmak. Ben üyelerinin birbirlerine yorumlarınızı göndermek için izin verir. Açıklamada; ben yorum almak ve daha sonra db kaydetmeden önce bu hattı aramak ..

$com = htmlentities($com);

Ben görüntülemek istediğinizde; Ben bu kod parçası diyoruz ..

$com = html_entity_decode($com);

Bu zaman iyi çoğu çalışır. Bu kullanıcılar / kopyalama youtube / imeem embed kodu kopyalayıp yapıştırın ve birbirlerine video ve şarkıları göndermenizi sağlar. Ayrıca resim yorumlarınızı göndermek için onları embed kodu kopyalayıp yapıştırın / photobucket ve kopya resim yüklemek için izin verir.

Ben sorun bazı insanlar temelde .. Ben çözmek için iyi bir çözüm bulmaya çalışıyorum böyle uyarı kutuları, web sayfası ve bunun gibi şeyler değişiklik yerini açmak gibi kötü şeyler yapmak eğilimi de var javascript kodu koyarak olmasıdır Bu sorun bir kez ve herkes için .. Nasıl diğer siteler işlevsellik bu tür izin veririm?

Görüşleriniz için teşekkür ederiz

5 Cevap

Üretim: htmlentities or just htmlspecialchars should be used for escaping strings that you embed into HTML. You shouldn't use it for escaping string when you insert them into a SQL query - Use mysql_real_escape_string (For MySql) or better yet - use prepared statements, burada parametre bağlanmış olan. Elle dizeleri kaçmayı zaman magic_quotes, kapalı veya başka devre dışı olduğundan emin olun.

İkincisi: Eğer tekrar çekin zaman unescape dizeleri yok. Örn. Hiçbir mysql_real_unescape_string var. Ve kullanmak gerekir stripslashes - ya sen ihtiyacınız olduğunu bulursanız, o zaman muhtemelen magic_quotes açık var - bunun yerine onları kapatın ve devam etmeden önce veritabanındaki verileri düzeltmek.

Üçüncüsü: html_entity_decode tamamen kullanım amaçlarını boşa ile yapıyoruz ne htmlentities. Şu anda, sitenize kötü niyetli bir kullanıcının enjekte kodlara karşı kesinlikle hiçbir koruma (Sen cross site scripting aka. XSS karşı savunmasız konum) var. Bir HTML bağlam içine gömmek Strings, ile öncelenmesi gerekir htmlspecialchars (veya htmlentities). Kesinlikle have sayfanızın içine HTML embed, önce bir temizlik solüsyonu ile çalıştırmak zorunda. strip_tags does this - in theory - but in practise it's very inadequate. The best solution I currently know of, is HtmlPurifier. Ancak, ne yaparsan yap, her zaman sitenize rasgele bir kullanıcı embed kodunu izin için bir risktir. Eğer mümkünse, bu gerekli değildir, öyle ki uygulamanızı tasarımı deneyin.

Ben böylece veritabanına göndermeden önce verileri ovma umuyoruz. Bir SQl injection saldırı için önemli bir hedef gibi geliyor. Ben bu bir soru değil biliyorum, ama sen farkında olması gereken bir şeydir.

Evet, bu bir sorundur. Siteleri bir sürü sadece kullanıcı alanlarda kendi özel biçimlendirme izin vererek bunu çözmek.

Eğer gerçekten HTML izin vermek istiyorsanız Ancak, tüm "script" etiketleri fırçalayın gerekir. Bunu mevcut kütüphaneler vardır inanıyorum. Ama bu kullanıcının girdiği kodu JS yürütülmesini önlemek için yeterli olmalıdır.

This is how Stackoverflow üzerinde RefacterMyCode, ben düşünüyorum, bunu yapar.

Sen Zend Filter, bu strip_tags çok daha fazlasını sunuyor ve bunu kullanmak için tüm Zend Framework dahil etmek zorunda değilsiniz düşünebilirsiniz.