Ajax請求安全性討論

 今天咱們來討論一下ajax請求的安全性,我相信各位在系統開發過程當中確定會絞盡腦汁的想怎樣能夠儘可能少的防止僞造ajax請求進行攻擊,尤爲是開發跟用戶交互比較多的互聯網系統。那麼就請你們來分享討論一下你在開發過程當中怎樣考慮ajax安全及防止ajax請求攻擊的問題。我也是一個新手,就先拋磚引玉了,寫的不對的地方歡迎批評指正。javascript

我先上兩段網摘html

Ajax安全防範的方法:java

  1. 判斷request的來源地址。這樣的方式不推薦,由於黑客能夠更改http包頭,從而繞過檢測。
  2. 採用驗證碼。也不推薦,請各位大大想一下用戶的感覺,剛輸入用戶名就讓我輸入註冊碼?這樣Ajax意義何在?
  3. 給一個IP在一個小時內,分配一些份額,好比500個(考慮到網吧等等多臺機器一個IP,使用NAT的地方)。

Ajax 安全性經驗法則: ajax

  1. 若是你使用身份驗證, 肯定你在請求頁上檢查!
  2. 爲 SQL 注入檢查。
  3. 爲 JavaScript 注入檢查。
  4. 保留商務邏輯在服務器上!
  5. 不要假設每一個請求是真正的!
  6. 確認檢查數據!
  7. 審查請求的數據並且肯定它是正確的。

目前爲止我作的最多的防止ajax請求攻擊的就是添加驗證碼添加隨機Token限制同一請求在規定時間內的最大請求數量服務器端校驗數據正確性、儘可能使用POST方法json

下面我寫一個在ajax請求的http頭中添加一個隨機Token來增長ajax請求的安全性。安全

一、使用  $.ajaxSetup和setRequestHeader方法爲全部的ajax請求的Http頭添加一個隨機Token值服務器

$.ajaxSetup({
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("token", "token隨機值");
                }
            });

 

這段js代碼能夠放在母板頁中,token值隨着頁面的加載生成並放在session中,這樣頁面中的其餘ajax進行請求時就會在Http頭中添加token:XXXXXXX的鍵值對。咱們就能夠在後臺獲取該token值並與session中的值對比,相等則爲合法的請求。session

二、Token生成。dom

 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.ashxpost

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請求安全的方法,歡迎評論。

即便沒有讀者,也要寫博客。

相關文章
相關標籤/搜索