Re: [問題] 一些javascript問題想請教

看板Web_Design作者 (沉默是金。)時間13年前 (2011/07/27 01:29), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《Derix (PalaPala)》之銘言: : 在下為js新手,想請問各位前輩些許問題... : 1.是否可能使用js開啟新頁面後,接著自動在該新頁面執行指定的js函式? : 如:在A頁面的網址執行javascript:window.open('B.html');後,接著自動在B頁面執 : 行其他script如alert('HI');呢(並非在B頁面寫入alert函式)? 沒有經過使用者自己有任何行為, 或者該目標頁面有任何行為幫助的話,基本上是不可能的。 舉幾個該目標頁面沒有良好設計的隱憂: 像是新頁面有倚賴網址參數去作一些行為, 因此從網址被注入攻擊,比方說 iframe src 是用 param 帶入的這種笨行為, 或者新頁面內容根本就有已經放好得內鬼。 : 2.在A頁面執行,從B網域得到的xmlhttprequest.responsetext的script內容,因為same : origin policy的關係,不能直接eval使用,那是否有其他方法可以間接執行該script : 呢? 1.這裡有幾件事情要講清楚 a.ajax 在 cross domain 時, 被 request 的目標頁面的確會收到,也會處理給你回應。 b.但是這個回應browser會擋掉把他當空氣,所以不只是不能直接eval使用, 應該是連 xmlhttprequest.responsetext 你都會拿不到。 c.目前要解決跨domain 處理的方式,在限定用get的情況下, getJSONP 是唯一解,他不是走 ajax 而是走 script tag, 而且使用上很有局限性。 : 3.承問題2,如果有的話,是否就代表該same origin policy事實上是不夠完備的? 請注意你談論的這兩件事情是A網站網站開發者設計的, 而且 B 網站如果A網站不信任他的話,根本不應該試著引入B網站的script。 same origin policy 事實上是一種防止 B 網站被A網站任意存取的機制, 而 JSONP 的實做方案,則是B網站提供其願意被存取的部份給A網站存取, 要討論完備這件事情,要先討論目的及其意義。 不然一個網站可以引入外界的 script tag , 這樣某個角度上一樣是 violate same origin policy 。 : 4.在HTML裡,嵌入<script src = "" rel="nofollow">http://xxx.xx/A.js">的動作可以跨網域取得A.js的 : script執行,那為何還需要same origin policy來防止XSS的攻擊呢? : 感謝指點迷津的各位大大們,如果小的觀念錯誤的話,還希望不吝給小的指導! : 謝謝Orz 1.這樣限定 javascript 的格式,而大幅的限制你獲取資料的方式 不代表任意html頁面資料都可以透過ajax去要求跟存取。 這方面其實要多參考 user script ,你就會知道兩者有多大的差別, 巧婦難為無米之炊,一般而言我們要存取外部網站,那些資料是重點。 如果你要對一篇文章作增刪的動作,你沒有先從頁面中拿到其連結或id, 你根本無從下手起,所以有這個限制是差很多的。 2.這樣就把事情限定在"get" 的層級裡, 一是可以擋掉get所不支援的大量資料存取, 另一方面是只要website 有確實把 get 跟post分清楚,就不會有問題。 XSS 目前的熱門危險區域還是在於使用者可以寫入 script 位置, 比方說使用者自由編輯區塊或者iframe url是由user 提供的。 但憑良心講 XSS 防堵上非常困難,目前最有效的 sub domain 方案, 實做起來非常累,而且又阻絕了內容本身跟外面的連結方式,會造成很多限制。 這也是為什麼目前各大 blog 平台,大致上都是採用 script 白名單的方式, 或者直接不允許使用者自行寫入 script tag 的作法。 -- I am a person, and I am always thinking . Thinking in love , Thinking in life , Thinking in why , Thinking in worth. I can't believe any of what , I am just thinking then thinking , but worst of all , most of mine is thinking not actioning... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 198.203.175.175 ※ 編輯: TonyQ 來自: 198.203.175.175 (07/27 01:30) ※ 編輯: TonyQ 來自: 198.203.175.175 (07/27 01:31) ※ 編輯: TonyQ 來自: 198.203.175.175 (07/27 01:32)

07/27 02:09, , 1F
oh..我回了一樣的問題,只是你人比較好XD
07/27 02:09, 1F

07/27 02:16, , 2F
驚 XD 我應該先看看ajax板的
07/27 02:16, 2F

07/27 02:36, , 3F
感謝東尼大熱心且詳細的回應,您說的內容新手在下需先消化後
07/27 02:36, 3F

07/27 02:38, , 4F
始能回覆或再提問~ 也很抱歉&感謝g大兩邊跑版回應="=
07/27 02:38, 4F

07/27 23:53, , 5F
我推文只是想說 TonyQ的回答比我還要詳細而已 XD
07/27 23:53, 5F
文章代碼(AID): #1EBlbxSa (Web_Design)
文章代碼(AID): #1EBlbxSa (Web_Design)