Güvenli olmayan JavaScript, URL ile çerçeveye erişme girişimi


112

Başka bir etki alanı url'si içeren iframe'den ana url'ye bir karma değeri ayarlamaya çalıştığımda aşağıdaki hatayı alıyorum:

Güvenli olmayan JavaScript, "URL2" URL'sine sahip çerçeveden "URL1" URL'sine sahip çerçeveye erişmeyi denedi. Domainler, protokoller ve portlar uyuşmak zorunda.

Bu sorunu nasıl çözebilirim?


3
Lütfen daha fazla ayrıntı, kod parçacığı, hata mesajı, kullandığınız çerçeve ekleyin .. Daha fazla ayrıntı, daha fazla ayrıntı ..
fifigyuri

5
Ya iframe'lere yüklenen ve aynı hatayı veren g + 1, facebook like or shre ve twitter sosyal eklentilerini uyguladığınızda?

Soru NEDEN Facebook ve Google betiklerinin web sitemin öğelerime erişmeye bile çalıştığı.
sergio

Yanıtlar:


124

Farklı orijinli bir alt belgeden, üst pencerenin location.hashözelliğine erişmenize izin verilmez , ancak locationözelliğin kendisini ayarlamanıza izin verilir .

Üst pencereler yer olduğu göz önüne alındığında bu araçlar http://example.com/page/yerine yapmanın,

parent.location.hash = "#foobar";

ebeveynlerin yerini bilmeniz ve yapmanız

parent.location = "http://example.com/page/#foobar";

Kaynakta gezinilmediğinden, bu beklendiği gibi çalışacak, yalnızca url'nin karma kısmını değiştirecektir.

Bunu etki alanları arası iletişim için kullanıyorsanız, bunun yerine easyXDM kullanmanızı tavsiye ederim .


13
Kimse bunu cevap olarak işaretlemedi ve henüz 60 olumlu oyu var. Bunun için bir rozet olmalı.
zachzurn

35
Rozetin adı ne olacak? "Tembel bir kişiye yanıt verdi"
nzifnab

1
Hey @atul, nazik olun ve bu cevabı en iyisi olarak işaretleyin. Başkalarının bilgilerinden hepimizin yararlanmasına izin veren sözleşmelere karşı saygılı olun ...
Clint Eastwood

13

Crossframe-Scripting, iki çerçeve farklı etki alanlarına sahipse -> Güvenlik mümkün değildir.

Şuna bakın: http://javascript.about.com/od/reference/a/frame3.htm

Şimdi sorunuzu cevaplamak için: Çözüm yok veya geçici bir çözüm yok, sadece web sitenizin tasarımını kontrol etmelisiniz, neden farklı alanlardan diğerinin url'sini değiştiren iki çerçeve olması gerektiğini.


82
Bu, özellikle web hizmetleri ve benzerlerinin bir seçenek olmadığı durumlarda, web sitenize üçüncü taraf bir uygulama yerleştirildiğinde sık karşılaşılan bir gerekliliktir.
Jacques

9

İframe.src için etki alanını chamge etmeye çalıştığımda aynı hata mesajını alıyordum.

Benim için cevap, iframe.src'yi AYNI etki alanındaki bir url olarak değiştirmekti, ancak bu aslında istenen etki alanına html yeniden yönlendirme sayfasıydı. Diğer alan adı iframe'imde herhangi bir hata olmadan göründü.

Bir cazibe gibi çalıştı. :)


burada tam olarak ne yaptığınızı biraz daha detaylandırır mısınız?
Devin G Rhode

kısaca açıklarsanız çok yardımcı olur.
Madhusudhan

2
En son Chrome'da çalışmıyor: src parametresini kontrol etmiyor, ancak gerçek URL yüklendi. Yani yönlendirme hilesi maalesef hiçbir şekilde yardımcı olmuyor :-(
lucaferrario

3
Tommy'nin bahsettiği şeyin sunucu tarafı proxy olduğuna inanıyorum. Örneğin bkz benalman.com/projects/php-simple-proxy veya developer.yahoo.com/javascript/howto-proxy.html veya google.com/... veya en René de Kat'in çözüm stackoverflow.com/a/11224975/27938
Oskar Austegard

Bu harika. Ancak bu sadece bunun üstesinden gelmenin genel olarak ne kadar önemsiz olduğunu gösteriyor. Tamam, kötü niyetli bir bilgisayar korsanı olduğumu varsayalım ve alanlar arası betikleme saldırıları yapmak istiyorum. Muhtemelen bu araçlar hakkında bilgi sahibi olacağım ve onları kullanacağım. Tarayıcı güvenlik düzeltmelerine gelince, bu, IE'nin Javascript'i bir uyarı olmadan yerel olarak çalıştırmanıza izin vermemesi kadar geciktirilebilir. Problem çözmez. Bir sürü yenisini yaratır.
Yitzhak

6

Bir çözüm, uzak içeriği alan yerel bir dosya kullanmak olabilir.

remoteInclude.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});


1
Bu, siteler arası komut dosyası güvenlik açıklarına kapı açar. Olası saldırıya bir örnek: 1. myevilserver.com'da, myevilserver.com'a POST gönderen bir giriş formu da dahil olmak üzere, sitenize benzeyen bir sayfa oluşturuyorum 2. Kullanıcılarınıza sahte bir haber bülteni gönderiyorum. https: // yoursite.com/remoteInclude.php?url=myevilserver.com 3. Sitenizde sunucumda yakaladığım bir giriş formu görüyorlar.
EricP

2
Olası bir çözüm, remoteInclude.php'nin tüm url'leri önceden onaylanmış bir etki alanı listesi ile karşılaştırmasını sağlamaktır.
EricP

Bu, siteler arası komut dosyası çalıştırma güvenlik açığı sorunlarını çözmez. Javascript ile harici bir web sitesine yapabileceğim, sunucu tarafından yapamayacağım kesinlikle hiçbir şey yok. Tüm bunlar, tarayıcının kendisini engellemektir ve fazladan bir adım ekleyerek web uygulamalarını daha az kullanışlı hale getirir. Ajax aracılığıyla yüklerseniz, bağlantıları yeniden yazarsanız ve geri gönderirseniz, tüm bunları yine de yapabilirsiniz. Bu işe yaramazsa, php veya herhangi bir dilde uzaktan rpc yapın. Bunun ortalama bir kodlayıcı için bir sorun olması bile saçma.
Yitzhak

3

HTML5 sürümü yerine Facebook beğen düğmesinin XFBML sürümünü kullanmanın bu sorunu çözdüğünü buldum. Düğmenin görünmesini istediğiniz yere aşağıdaki kodu ekleyin:

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

Ardından bunu HTML etiketinize ekleyin:

 xmlns:fb="http://ogp.me/ns/fb#"

2
Facebook'un bu soruyla ne ilgisi var?
Kukks

16
Çünkü facebook gibi düğmelerde de bu hatayı alıyorsunuz ve bir cevap ararken bu sayfayı buldum, bu yüzden başkalarının cevaba ihtiyacı olabileceğini düşündüm.
Luke Alderton

1

Sorun, bir proxy oluştursanız veya içeriği yükleyip yerelmiş gibi enjekte etseniz bile, içeriğin tanımladığı tüm komut dosyaları diğer etki alanından yüklenecek ve etki alanları arası sorunlara neden olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.