2011-10-21 62 views
0

我敢肯定,這是一個安全問題,讓我不這樣做,但我不知道是否有一個解決方法,我不知道...JavaScript安全阻止我?

我有一個腳本注入用戶的電子郵件到聯繫人數據庫我的客戶,它在IE瀏覽器中轟炸,但在FF,鉻(如往常一樣)工作。只是想知道我是否可以將服務器添加到信任中或使其工作?

<script type="text/javascript"> 

    window.onload = init; 

    //Global XMLHTTP Request object 
    var XmlHttp; 
    function CreateXmlHttp() { 
     //Creating object of XMLHTTP in IE 
     try { 
      XmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
     } 
     catch (e) { 
      try { 
       XmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      catch (ex) { 
       XmlHttp = null; 
      } 
     } 
     //Creating object of XMLHTTP in Mozilla and Safari 
     if (!XmlHttp && typeof XMLHttpRequest != "undefined") { 
      XmlHttp = new XMLHttpRequest(); 
     } 
    } 

    function init() { 
     var x = document.getElementsByName("btnContinue"); 
     x[0].onclick = submitForm; 
    } 

    function submitForm() { 
     var x = document.getElementsByName('Email'); 
     if (x[0].value.length > 0) { 
      CreateXmlHttp(); 
      XmlHttp.open("POST", "https://app.icontact.com/icp/signup.php", false); 
      XmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      XmlHttp.send("redirect='http://www.xyz.com/articles.asp?ID=97'&errorredirect='http://www.xyz.com/articles.asp?ID=256'&fields_email=" + 
       x[0].value + "&listid=123&specialid:123=YP7I&clientid=123&formid=123&reallistid=1&doubleopt=0&Submit=Submit"); 
     } 
    } 

</script> 

我很感激任何見解。

謝謝!

+0

這將使用ajax更少的代碼http://api.jquery.com/jQuery.ajax/ –

+0

看起來像它可能是一個同源的政策問題。如果您有權訪問https://app.icontact.com/,則可以嘗試設置訪問控制請求頭以允許您的域發出POST請求。 – JackWink

+0

我有點受到限制,因爲我正在處理我實際上無法控制的網頁。該頁面託管在其中一個第三方站點構建器上,只允許通過頁面上的預定義區域注入代碼......可以對其進行攻擊。所以我真的不能創建新的表單或導入庫,除非他們全部隱藏。我應該注意到這在Firefox中工作得很好。只在IE中爆炸。 – TomO

回答

0

我的第一個建議是嘗試在之前創建XMLHttpRequestActiveX對象。 IE7和其他瀏覽器都支持AJAX。

接下來,您應該在open()方法中使用相對路徑。雖然我認爲形成你的問題,但它需要能夠在任何網站上運行?在這種情況下,我會建議創建一個窗體和一個iframe並使用「舊」方法。

0

這是一個同源政策問題。允許訪問內容標題可能被設置,但IE ActiveXObject不會使用它們。 XMLHttpRequests服從標題,並將支持它們的瀏覽器。

看到這個問題: AJAX Permission Denied On IE?

雖然它看起來並不像他們發現了一個IE瀏覽器兼容的跨域POST的解決方案......

如果你能代理它通過你的Web服務器(做一個POST到你的服務器),並讓服務器進行POST,你的問題就解決了。