今天咱們來討論一下ajax請求的安全性,我相信各位在系統開發過程當中確定會絞盡腦汁的想怎樣能夠儘可能少的防止僞造ajax請求進行攻擊,尤爲是開發跟用戶交互比較多的互聯網系統。那麼就請你們來分享討論一下你在開發過程當中怎樣考慮ajax安全及防止ajax請求攻擊的問題。我也是一個新手,就先拋磚引玉了,寫的不對的地方歡迎批評指正。javascript
我先上兩段 網摘 :css
Ajax 安全防範的方法:html
Ajax 安全性經驗法則:java
目前爲止我作的最多的防止ajax請求攻擊的就是 添加驗證碼 、 添加隨機 Token ,限制同一請求在規定時間內的最大請求數量 、 服務器端校驗數據正確性、儘可能使用POST 方法 。ajax
下面我寫一個在ajax請求的http頭中添加一個隨機Token來增長ajax請求的安全性。json
一、使用 $.ajaxSetup和setRequestHeader方法爲全部的ajax請求的Http頭添加一個隨機Token值安全
$.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader("token", "token隨機值"); } });
這段js代碼能夠放在母板頁中,token值隨着頁面的加載生成並放在session中,這樣頁面中的其餘ajax進行請求時就會在Http頭中添加token:XXXXXXX的鍵值對。咱們就能夠在後臺獲取該token值並與session中的值對比,相等則爲合法的請求。服務器
二、Token生成。session
string Token = new Random().NextDouble().ToString(); Session["token"] = Token; System.Web.UI.HtmlControls.HtmlGenericControl script = new System.Web.UI.HtmlControls.HtmlGenericControl("script"); script.Attributes.Add("type", "text/javascript"); script.InnerHtml = @" $.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader(""token"", """ + Token + @"""); } }); "; Page.Header.Controls.Add(script);
三、新建DataService.ashxdom
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string Token = context.Request.Headers["token"]; if (string.IsNullOrWhiteSpace(Token) || context.Session["token"] == null) { context.Response.Write("請求不合法"); } else if (Token != context.Session["token"].ToString()) { context.Response.Write("請求不合法"); } else { context.Response.Write("請求合法§"); } }
四、測試Ajax請求
$.post("DataService.ashx", function (json) { alert(json); });
打開FireBug查看請求,發現多了一個token的值
若是你有什麼好的能保證ajax請求安全的方法,歡迎評論。
即便沒有讀者,也要寫博客。