2011-06-14 15 views
8

neden ben gibi normal sitenin alt alan adı yer alan bir sitenin test sürümünü var. HTML5 itme/replaceState ve <base> etiket güvenlik özel

geri orijinal etki alanına tüm kaynak istekleri çevirmek için <base> etiketini kullanın: Ben HTML5 itme/replaceState destek uygulanan dek

<base href="http://x.com/" /> 

Bu taktik harika çalıştı. Ben konsolunda bu deyimi yürütme Şimdi eğer

:

code: 18 
constructor: DOMExceptionConstructor 
line: 2 
message: "SECURITY_ERR: DOM Exception 18" 
name: "SECURITY_ERR" 
sourceId: 4839191928 
__proto__: DOMExceptionPrototype 

... ve bu hatayı:

history.pushState({}, "", ""); 

... o zaman WebKit tabanlı tarayıcılarda bir DOMException nesneyi almak FireFox 4:

Security error" code: "1000 

Ben <base> etiketi kaldırmak ve aynı stateme yürütmek durumunda nt, yeni devlet itilir ve bir istisna yoktur.

Bazı sorular: 1) bu davranış güvenlik riski midir, yoksa bir hata mıdır? Ve 2) sorunu tamamen ortadan kaldıracak <base> etiketini kullanma dışında bir istisna veya bir taktiği önlemek için bir geçici çözüm var mı?

İlginiz için teşekkür ederiz.

cevap

12

Bu bir hata değil, Same origin policy ihlali yapıyorsunuz. "", <base> etiketini kullandığınız için 'http://x.com/' olarak çözülecek olan göreli bir URL'dir. http://x.com, sayfanın barındırıldığı yerden farklı bir etki alanıdır; bu nedenle, bu işlemi aynı başlangıç ​​politikasından kaynaklanan bir neden oluşturur.

Bunu düzeltmek gerekir sizin history.pushState() çağrısında http://test.x.com/ bir kaynağa işaret eden bir mutlak URL kullanma:

history.pushState({}, "", "http://test.x.com/"); 
+0

Evet! teşekkür ederim. – JKS