Kullanıcıların bir HTML formu aracılığıyla
Ben gerçekten (aslında tür şok düşünmek olan) bir sayfada medya koyarak ele asla ettik gibi OBJECT
almak hangi parametreler EMBED
ve gerçekten emin değilim ama buna bir BB Code yaklaşım ve [embed url="http://www.whatever.com/myvideo.whatever" ...]
gibi bir şey yapmak ve daha sonra onlar okunaklı ve kendi <EMBED>
etiketi yapalım, URL ve başka bir şey dışarı ayrıştırmak istiyorum.
edit: Tamam, böyle bir şey ince olmalıdır:
$youtube = '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1"></param> </param><embed src="http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>';
$blip = '<embed src="http://blip.tv/play/AZ_iEoaIfA" type="application/x-shockwave-flash" width="640" height="510" allowscriptaccess="always" allowfullscreen="true"></embed>';
preg_match_all("/([A-Za-z]*)\=\"(.+?)\"/", $youtube, $matches1);
preg_match_all("/([A-Za-z]*)\=\"(.+?)\"/", $blip, $matches2);
print '<pre>' . print_r($matches1, true). '</pre>';
print '<pre>' . print_r($matches2, true). '</pre>';
Bu irade çıktı:
Array
(
[0] => Array
(
[0] => width="425"
[1] => height="344"
[2] => name="movie"
[3] => value="http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1"
[4] => src="http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1"
[5] => type="application/x-shockwave-flash"
[6] => allowfullscreen="true"
[7] => width="425"
[8] => height="344"
)
[1] => Array
(
[0] => width
[1] => height
[2] => name
[3] => value
[4] => src
[5] => type
[6] => allowfullscreen
[7] => width
[8] => height
)
[2] => Array
(
[0] => 425
[1] => 344
[2] => movie
[3] => http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1
[4] => http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1
[5] => application/x-shockwave-flash
[6] => true
[7] => 425
[8] => 344
)
)
Array
(
[0] => Array
(
[0] => src="http://blip.tv/play/AZ_iEoaIfA"
[1] => type="application/x-shockwave-flash"
[2] => width="640"
[3] => height="510"
[4] => allowscriptaccess="always"
[5] => allowfullscreen="true"
)
[1] => Array
(
[0] => src
[1] => type
[2] => width
[3] => height
[4] => allowscriptaccess
[5] => allowfullscreen
)
[2] => Array
(
[0] => http://blip.tv/play/AZ_iEoaIfA
[1] => application/x-shockwave-flash
[2] => 640
[3] => 510
[4] => always
[5] => true
)
)
Bundan sonra bunun üzerinde oldukça yalındır bulunuyor. Genişlik / yükseklik gibi şeyler için size bilgilerden is_numeric
and with the rest you can run the values through htmlentities
and construct your own <embed>
etiketi ile onları kontrol edebilirsiniz. Ben bu güvenli olacaktır oldukça eminim. Eğer gerekli tüm verilere sahip olacağından bile, blip.tv bağlantıları ile (ben daha fazla yerde eserlerini varsayıyorum) YouTube gibi tam teşekküllü <object>
bir yapabilirsiniz.
Ben diğer video paylaşım sitelerinden linkleri ile bazı tuhaflıklar görebilirsiniz eminim ama bu umarım başlamak olacaktır. İyi şanslar.
Girilen HTML tarayarak güvenilir bir zararlı kod tespit şansınız sıfıra üzeresiniz. (Tarayıcı özel biçimlendirilmiş HTML dahil) komut enjekte için bir çok yolu vardır, hepsini dışarı almak mümkün olmayacaktır. Büyük web posta sağlayıcıları yeni patlatır bulma yıl sonra hala varsa bunu yapmak mümkün olacak şansı yoktur.
Beyaz Liste fişliyor daha iyidir. Peki yerine XHTML olmasını girdi gerektiren, ve standart bir XML ayrıştırıcı kullanarak ayrıştırmak olabilir. Sonra DOM yürümek ve elemanlarının her ve nitelikleri bilinen iyi olup olmadığını kontrol edin ve eğer her şey tamam, bir iyi bilinen DOM gelen, hangi geri XHTML tefrika, hatalı biçimlendirilmiş olmamalıdır. Unicode desteği ile düzgün bir XML ayrıştırıcı da ücretsiz kötü 'overlong UTF-8 dizileri' (IE6 ve daha eski operalar etkileyen bir güvenlik deliği) filtre.
Eğer herhangi bir etki embed / nesneleri izin verirseniz ... Ancak, zaten bir dış etki, sayfanızın tam komut erişim sağlayan, bu nedenle HTML enjeksiyon endişeler az olan. Plug-ins Flash gibi kandırmaca gerekli olan her türlü olmadan JavaScript çalıştırmak mümkün olması muhtemeldir.
Yani önceden belirlenmiş iyi bilinen etki nesnelerin kaynağı sınırlayıcı olmalıdır. Eğer zaten yapıyoruz ve eğer, sadece kullanıcı video sağlayıcısı ve klip kimliği seçin, ve bu sağlayıcı için uygun, iyi bilinen gömme kodu içine dönüştürmek için izin muhtemelen daha kolay. Eğer Bir bbcode gibi biçimlendirme kullanarak Örneğin, izin geleneksel şekilde kullanıcıların YouTube klip şey [youtube] Dtzs7DSh [/ youtube] olacaktır bulunmaktadır.
İşte blip.tv yapıştırılan kod bir örnek:
<embed src="http://blip.tv/play/AZ_iEoaIfA" type="application/x-shockwave-flash"
width="640" height="510" allowscriptaccess="always" allowfullscreen="true"></embed>
Burada YouTube'dan alabilirsiniz ne bir örnek var:
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1"></param>
<param name="allowFullScreen" value="true"></param>
<embed src="http://www.youtube.com/v/Z75QSExE0jU&hl=en&fs=1"
type="application/x-shockwave-flash" allowfullscreen="true"
width="425" height="344"></embed>
</object>