JavaScript

IE8 ve “Cross Site Scripting”

Zaman zaman Java Script kodlarımızda farklı bir alan adı içinden yayınlanan dokümana erişip burada içerilen başka bir Java Script kod kümesini çalıştırma ihtiyacı duymuşuzdur. Bu işleme “Cross Site Scripting” denir ve kötü niyetli kişiler bu özelliği kullanarak bir site içinden kendi sitelerine bilgi akışı sağlayabilirler.

Örnek vermek gerekirse; ana doküman X.COM adresinden yayınlanırken ana doküman içindeki bir IFRAME elamanı kaynağı Y.COM adresinden yayınlanan sayfayı gösteriyor olabilir. Bu durumda X.COM adresindeki sayfada barındırılan Java Script kodu Y.COM (IFRAME elemanının içerdiği doküman)  adresindeki dokümana ait olan bir bileşene erişmeye veya bu dokuman içindeki kodu çalıştırmaya kalktığında bir hata alacaktır. Bunun nedeni güvenlik unsurlarıdır. Bir alan adı içinde çalışan istemci (Java Script) kodu başka bir alan adı içindeki elemanlara erişemez.

IE8’den önce bunu sağlamak için araçlar (Tools) menüsünden bir takım ayarlar yapılması gerekiyordu. Yandaki imajda bu ayarın nasıl yapıldığını görebilirsiniz. Her ne kadar bu ayarı sadece güvenilen siteler için yapma olanağı varsa da yine de bu ayarı yapmak bir güvenlik açığı oluşturmak olarak kabul edilebilir.

 

IE8’de içerilen HTML5 standartları ile bu gibi bir ihtiyaç özel ayarlara gerek kalmadan kodlanabilir. Bunun için “onmessage” olayı “postMessage” metodu kullanılabilir.

Aşağıdaki örnekte A dokümanı B dokümanına bir masaj göndermekte ve B dokümanı da gelen mesaja göre gerekli işlemleri yerine getirmektedir.

A dokümanı içindeki script postMessage metodunu kullanarak istenilen mesajı B dokümanına gönderir.

var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Merhaba');

B dokumanı içindeki script ise onmessage olayı ile bu mesajı karşılar ve istenilen işleri yerine getirir. Buradaki iş geriye (A dokümanına) bir bir mesaj gönderilmesidir.

document.attachEvent('onmessage',function(e) {
if (e.origin == 'a.com') {
if (e.data == 'Merhaba') {
e.source.postMessage('Hoş geldiniz');
} else {
alert(e.data);
}
}
});

Bu metotların HTML5 içinde tanımlı olduğunu ve IE8 ile çalışacağını unutmayınız.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir