簡體   English   中英

在沒有服務器端腳本的情況下在javascript中繞過相同的源策略

[英]Getting around same origin policy in javascript without server side scripts

我有一個不允許服務器端腳本編寫的環境(在服務器上“安裝”腳本非常困難)。 我嘗試使用iframe來違反javascript的同源起源; 然而,這不起作用。 還有其他我不知道的變通方法嗎?

謝謝!

正如David Dorward所說,JSON-P是最簡單和最快的; 然而,還有另一個技巧,特別是使用兩個iframe。

兩個不使用JSONP解決此問題,您可以執行以下操作。 此技術假定您對父頁面具有某種開發訪問權限。

兩個域/站點上有三個頁面。

  1. 父頁面
  2. 內容頁
  3. 跨域通信頁面(又名“xdcomm”)

父頁面和xdcomm頁面托管在同一域中的頁面,內容頁面托管在任何其他域上。 內容頁面作為iframe嵌入到父頁面中,xdcomm頁面作為隱藏的iframe嵌入到內容頁面中。

在此輸入圖像描述

xdcomm頁面包含一個非常簡單的腳本,它檢測查詢字符串中的GET參數,為methodargs變量解析該字符串(其中args是一個JSON編碼的字符串),然后在父頁面中使用指定的參數執行指定的方法。 這里可以看到一個例子(查看源代碼)。

即使JavaScript的同源策略限制一個域上的代碼訪問另一個域的代碼,但域是否相互嵌套並不重要(域A,嵌套在域B中,嵌套在域A中)。

因此,簡而言之,內容頁面通過將iframe的來源更改為http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]將內容頁面通過xdcomm頁面發送到父頁面http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4] 這相當於在父頁面中執行foo(1,2,3,4)

另外,要知道已經存在可以幫助您解決此問題的庫,例如easyxdm 我在這里解釋的是他們使用的技術之一的基礎,雖然它可能不那么花哨,但它肯定是一個功能齊全且輕量級的實現。

希望不是,因為這將是一個安全漏洞! :)

但是,如果您的網站都是同一個域中的子域,那么document.domain可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM