台灣最大程式設計社群網站
線上人數
824
 
會員總數:245903
討論主題:189495
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> AJAX是否可對SERVER端的網頁做出來源限制
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
AJAX是否可對SERVER端的網頁做出來源限制
價值 : 30 QP  點閱數:2003 回應數:13
樓主

迷路
高級專家
11021 137
7449 1741
發送站內信

捐贈 VP 給 迷路
使用ajax的時候server端接收網頁的網址和參數全都被寫script中
使用者原全可以藉此不經過我製作的介面頁來取得回傳值
而使用request.servervariables("HTTP.REFERER")的方式也無法抓到來源網址
所以想請問是否有其他方式避免被人直接使用該網頁

本篇文章發表於2006-10-18 17:13
1樓
用Session呢???

我記得在使用Ajax呼叫的時候, 被呼叫的網頁, 其Session跟呼叫頁是相同的...
(很久沒試了...)

也就是說, 在呼叫頁設定Session, 然後在被呼叫頁檢查是否有Session...
應該可行吧...
本篇文章回覆於2006-10-18 17:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
還是有問題啊@@
使用者只要先經過介面頁就能取得session值
而且session有消失的可能性
會導致正常使用者無法使用
本篇文章回覆於2006-10-18 17:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
除非使用者 在介面頁等了超過20分鐘都沒做事, 然後觸發Ajax的功能,
不然這個Session消失的可能性是0...

至於, 使用者先經過介面頁再去讀取...
如果是直接在介面頁開新視窗(子視窗) 然後再去改網址...
這個就真的沒辦法了........

不然就多做些麻煩事...例如 : Ajax傳回的資料, 做加密
然後在Client再把字串解密 @_@
(這種麻煩事, 必須Client跟 Server的加解密方式相同才行)
當然...有心人事還是可以透過Script去了解整個加解密過程 @_@
.....

.....
.....
我可以請教一下是什麼樣的資料, 怕被別人直接使用呢?
本篇文章回覆於2006-10-19 01:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Jerry Lai
檢舉此回應
>> session有消失的可能性
可以搞一個什麼事都不做的網頁 只負責作redirect 就可以重新產生session 了

你可以再script裡傳一個每次都不同的token ID(存在file或DB裡), 這樣應該可以阻擋掉部分惡意的直接連結
本篇文章回覆於2006-10-19 08:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
#3不一定要閒置session才會不見
 聽說window2003很容易出現session消失
 而我使用window2000也曾經出現session莫名其妙消失的神奇事件
 而且因此引發大災難
 update的時候沒有先檢查變數是否是空白
 結果整個資料庫幾乎全毀
 還好資料庫有每天備份
 從此得到教訓--寧願多做4、5道用不上的檢查
 也絕不讓bug有機會波及整個資料庫

 實際上只要有會員系統裡面的資料都應該要能避免被直接使用
 不然我只要知道script傳過去的參數
 就有可能能竊取其他使用者的資訊
#4Jerry大的方法倒是我之前沒想過的
 這樣的確能避免session因為閒置而消失
 token ID的方法我之前也沒想過
 要花點時間好好琢磨琢磨


其實我很清楚
程式都已經寫在script中了
想要避免惡意使用者幾乎是不可能的任務
只要對方功力夠
就算我去加密script大概還是有可能被破解
所以最一開始才會想到在server端做來源檢查
就我看來這是對付惡意使用者最後的防線
沒想到不能用
所以才會想說這個技術是否有其他的方法可以做類似的檢查
本篇文章回覆於2006-10-19 09:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
原來Win2003有這麼恐怖的Bug呀.......

(我還沒遇到過, 不曉得是幸運還是不幸...)
我目前的程式都沒有考慮過Session莫名其妙消失的狀況...
要是真的遇上這種事, 我應該也會當場死在哪裡吧...

...
本篇文章回覆於2006-10-19 10:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
IIS重新整理,SESSION應該就會不見了吧,這個時候如果還有USER在線上,SESSION自然是沒有資料了
除非是在GLOBAL.ASA中重抓一次
#4的方法在IIS重開還是會發生,不過還好的是,只是USER抓不到資料,而不是資料被任意抓

我想作者大概是用 LIKE "session_id%"之類的指令來UPDATE資料,才會一次UPDATE全部
本篇文章回覆於2006-10-19 11:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

Jerry Lai
檢舉此回應
to 常運動的胖子
#4的方法不是用session存的 所以不會有這個問題
本篇文章回覆於2006-10-19 11:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
最有價值解答

Jerry Lai
檢舉此回應
to 樓主,
request.servervariables("HTTP.REFERER") 寫錯了
應該是 Request.ServerVariables("HTTP_REFERER")
本篇文章回覆於2006-10-19 12:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Jerry Lai
檢舉此回應
我以前是用 Request.ServerVariables("REQUEST_METHOD") + Request.ServerVariables("HTTP_REFERER") 一起判斷,
XMLHTTP 只用 post 的方式, 這樣問題會比較少
本篇文章回覆於2006-10-19 12:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
是#1才是SESSION,看錯了

我也是只要POST的方法,一般程式比較不好用POST連線到另一台主機
本篇文章回覆於2006-10-19 13:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
#7我不是用like
 只是剛好更新的條件欄位
 資料庫中大部分的資料該欄位都是''
 結果一更新下去這些資料就全部被覆蓋
 跟全毀沒兩樣
#9對厚
 沒注意到真的打錯了
 原來我又耍笨了
#10耶?XMLHTTP是用POST的方式傳資料嗎?我一直以為是用GET
本篇文章回覆於2006-10-19 16:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

Jerry Lai
檢舉此回應
>> #10耶?XMLHTTP是用POST的方式傳資料嗎?我一直以為是用GET
指定用 GET 或 POST 都可以
本篇文章回覆於2006-10-19 22:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.