跨域請求方法及安全問題

跨域請求方式

一、jsonp 是json 的一種使用方式, 跨域是經過javascript 方式實現,而不是 xhr; request_method 始終是get方式; JSONP是基於JSON格式的爲解決跨域請求資源而產生的解決方案。它的基本原理是利用HTML的元素標籤,遠程調用JSON文件來實現數據傳遞。本文將梳理JSONP實現過程當中的安全攻防。javascript

<script type="text/javascript" src="http://www.yiwuku.com/myService.aspx?jsonp=callbackFunction"></script>

而後經過回調函數callbackFunction處理返回java

ajax調用方式:ajax

$.ajax({
dataType:'jsonp',
data:'id=10',
jsonp:'jsonp_callback',
url:'http://www.yiwuku.com/getdata',
success:function(){
//dostuff
},
});

二、若是想使用 post 方式則須要在服務器端加容許跨域請求 header("Access-Control-Allow-Origin:*"); 而後 ajax 請求中json

crossDomain: true,
 dataType: 'json',

另若是返回中文亂碼,需 js 加跨域

contentType: 'application/x-www-form-urlencoded;charset=UTF-8',

jsonp 安全問題

JSON劫持,CSRF(Cross-site request forgery跨站請求僞造)攻擊範疇。 跨站請求僞造(cross site request forgery簡稱CSRF)是一種利用用戶的身份對網站進行某種操做的漏洞,用戶本身察覺不到這種操做,但操做請求是以用戶的身份發出去的。網站是經過cookie來識別用戶的,好比當用戶成功在A網站進行身份驗證以後瀏覽器就會獲得一個標識其身份的cookie,只要不關閉瀏覽器或者退出登陸,之後訪問這個A網站會帶上這個cookie。若是這期間用戶訪問了某個不受信任的第三方站點B,而該站點包含了對A站點某個接口進行請求的代碼,那麼這個請求就會以用戶的身份發出去,而用戶本身並不知情。瀏覽器

危害:以用戶的身份在用戶不知情的狀況下執行用戶所不肯意執行的操做,好比:修改我的資料,修改管理密碼,進行銀行轉帳,操縱用戶惡意刷票等等安全

方案之一就是驗證JSON文件調用的來源(Referer)。它主要利用<script>遠程加載JSON文件時會發送Referer的機制,在網站輸出JSON數據時,判斷Referer是否包含在白名單內。 方案之二就是使用隨機token防護, 例如經過http://r.qzone.qq.com/cgi-bin/tfriend/friend_show_qqfriends.cgi?uin=[QQ號]&g_tk=[隨機token]輸出JSON,但如此token可經過如下方式暴力循環破解:服務器

限制Referer+部署隨機token實現cookie

關鍵性的操做一概使用POST方式提交數據,同時在表單和服務端session中都要存放token用戶數據提交過來以後檢查所提交的token是否和服務端存放的token一致,若不一致,則應視爲發生了CSRF攻擊,該次請求無效。session

在服務器和瀏覽器端都實現了利用origin字段的方法來防止CSRF攻擊

相關文章
相關標籤/搜索