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请求安全的方法,欢迎评论。

即便没有读者,也要写博客。

相关文章
相关标签/搜索