[問題] AJAX跨網域POST呼叫

看板Ajax作者 (初心者)時間11年前 (2013/05/22 11:13), 編輯推噓9(9045)
留言54則, 10人參與, 最新討論串1/1
各位前輩好 近日在評估ajax安全性問題 若整個頁面的新增、修改、刪除都用ajax來做 考量到程式碼外漏,可能會被人CSRF 故測了一下跨網域呼叫,之前爬文是說瀏覽器會擋不同網域 但測試結果Crome / Firefox 會擋 IE 8則出現「這網頁正在存取非其控制下的資訊....要繼續?」 按下「是」則呼叫成功 故認為瀏覽器並非一定可以擋XSS 若小弟在使用ajax時,想保護程式被解讀,是否有什麼方法呢? 還是說insert/delete本身就不適合使用ajax ?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.154.130

05/22 13:01, , 1F
最簡單的就是檢查referer..防君子不防小人
05/22 13:01, 1F

05/22 13:02, , 2F
ajax要做到保密就要做one time token..
05/22 13:02, 2F

05/22 13:20, , 3F
可以ant大的這篇投影片 http://goo.gl/4kTbO
05/22 13:20, 3F

05/22 13:40, , 4F
獲取權限時 給瀏覽端一個亂數token 每個新增修改刪除
05/22 13:40, 4F

05/22 13:40, , 5F
動作都得附上該token 伺服器在驗證該token與ip與瀏覽器
05/22 13:40, 5F

05/22 13:41, , 6F
皆正確符合之後才真的動作
05/22 13:41, 6F

05/22 13:41, , 7F
還有所有token一定都要有時效性
05/22 13:41, 7F

05/22 14:39, , 8F
只有我看不懂原PO的問題嗎...CSRF,XSS, Cross Domain Ajax
05/22 14:39, 8F

05/22 14:40, , 9F
程式混碼應該不能混在一起討論吧..
05/22 14:40, 9F

05/22 14:49, , 10F
不確定觀念是否完全正確,但要防XSS或CSRF首要應該是印網頁
05/22 14:49, 10F

05/22 14:51, , 11F
時purify所有使用者自己上傳的data, 另外Server可定期更換
05/22 14:51, 11F

05/22 14:52, , 12F
JSESSIONID或其他類似cookie降低token被偷時的損失
05/22 14:52, 12F

05/22 14:59, , 13F
和ajax或是使不使用ajax應該沒有關係..
05/22 14:59, 13F

05/22 15:02, , 14F
而檢查token,referer或ip,都比較像是給偽造來源者麻煩
05/22 15:02, 14F

05/22 17:37, , 15F
我想原po擔心的是別的網站被利用來CSRF/XSS 讓有權限
05/22 17:37, 15F

05/22 17:37, , 16F
的使用者亂刪改他做的網站
05/22 17:37, 16F

05/22 17:39, , 17F
方法就是每次執行動作時都需要附token 使用者逛到其他
05/22 17:39, 17F

05/22 17:39, , 18F
網站時 即使能被XSS送需求到你的網站 但沒有token還
05/22 17:39, 18F

05/22 17:39, , 19F
是會失敗
05/22 17:39, 19F

05/23 00:34, , 20F
AJAX送HTML FORM的話可以藏TOKEN在FORM裡
05/23 00:34, 20F

05/23 00:37, , 21F
送JSON的話就放在HTTP HEADER裡 如果我理解問題正確的話..
05/23 00:37, 21F

05/23 14:05, , 22F
AJAX 跟會被 CSRF 不是同一回事,可能但不總是
05/23 14:05, 22F

05/23 14:06, , 23F
你要不要直接舉情境比較好討論。
05/23 14:06, 23F

05/23 14:06, , 24F
說白了,你以為用 ajax 會被 CSRF 的,寫成 form 就不會嗎?
05/23 14:06, 24F

05/24 09:26, , 25F
T大,會只針對ajax討論,是因為小弟用的是.net
05/24 09:26, 25F

05/24 09:27, , 26F
.net本身機制有加token保護
05/24 09:27, 26F

05/24 09:27, , 27F
我擔心的確實如M大所說的
05/24 09:27, 27F

05/24 09:30, , 28F
就是javascript被解讀,被偽造的資料來Insert或delete
05/24 09:30, 28F

05/24 09:37, , 29F
舉例來說,加入會員的功能,若以ajax來做新增資料的動作
05/24 09:37, 29F

05/24 09:38, , 30F
而原先設計的頁面寫了一堆javascript驗證
05/24 09:38, 30F

05/24 09:39, , 31F
但程式碼被看懂後,別人直接寫個新網頁來丟參數到我的後台
05/24 09:39, 31F

05/24 09:40, , 32F
所以才想說使用ajax前,先請益大家如何防守
05/24 09:40, 32F

05/24 09:43, , 33F
小弟再去研究一下token的作法,感謝大家
05/24 09:43, 33F

05/24 13:47, , 34F
TRY HtmlHelper.AntiForgeryToken
05/24 13:47, 34F

05/24 14:49, , 35F
要雙向驗證啊,不然還是會被 man in the middle 攻擊..
05/24 14:49, 35F

05/24 14:52, , 36F
任何需要驗證的資料在後端一定都需要驗證一次,前端驗證
05/24 14:52, 36F

05/24 14:53, , 37F
說到底只是讓使用者及時能知道自己填錯資料罷了
05/24 14:53, 37F

05/24 14:54, , 38F
鐵則就是絕不能相信使用者送來的任何資料
05/24 14:54, 38F

05/24 14:55, , 39F
各種加token的方法都只是輔助,後端塞入DB前一定要驗證
05/24 14:55, 39F

05/24 14:58, , 40F
原PO可以打開firbug或chrome的開發工具看看Browser是
05/24 14:58, 40F

05/24 14:59, , 41F
怎麼跟後端間互動的(其實就是http request和response)
05/24 14:59, 41F

05/24 14:59, , 42F
要偽造真的一定都做得到
05/24 14:59, 42F

05/29 08:34, , 43F
我記得 cookie 本身有綁 domain, ajax 跨 domain 也有很
05/29 08:34, 43F

05/29 08:35, , 44F
多限制, 許多安全性問題可能瀏覽器都幫你擋掉了, 可以先
05/29 08:35, 44F

05/29 08:36, , 45F
查一下 spec 或做一些實測並用 sniffer 檢查看看
05/29 08:36, 45F

05/29 08:38, , 46F
例如像 chrome 在發 ajax 時收到 302 回應要求跳頁時就是
05/29 08:38, 46F

05/29 08:39, , 47F
直接擋掉, 不幫你發跳頁的 request, 這本身也是 w3c spec
05/29 08:39, 47F

05/29 08:41, , 48F
至於驗證邏輯一定要以 server 為主, 前端只是貼心提示用
05/29 08:41, 48F

05/29 15:44, , 49F
你可以GOOGLE看看jsonp
05/29 15:44, 49F

05/30 11:25, , 50F
jsonp 基本上是在堆疊的上方用其它方式達到相同效果, 基
05/30 11:25, 50F

05/30 11:26, , 51F
本上算是 workaround...部份也需要 server 配合
05/30 11:26, 51F

05/30 11:34, , 52F
server 端沒做配合的話不必擔心別人用 jsonp 就會怎樣的
05/30 11:34, 52F

05/30 11:35, , 53F
* 就可以把你 server 怎樣
05/30 11:35, 53F

06/09 20:29, , 54F
了解,感謝前輩們指導
06/09 20:29, 54F
文章代碼(AID): #1Hd3VNH- (Ajax)
文章代碼(AID): #1Hd3VNH- (Ajax)