今天咱们来讨论一下ajax请求的安全性,我相信各位在系统开发过程当中确定会绞尽脑汁的想怎样能够尽可能少的防止伪造ajax请求进行攻击,尤为是开发跟用户交互比较多的互联网系统。那么就请你们来分享讨论一下你在开发过程当中怎样考虑ajax安全及防止ajax请求攻击的问题。我也是一个新手,就先抛砖引玉了,写的不对的地方欢迎批评指正。javascript
我先上两段网摘:html
Ajax安全防范的方法:java
Ajax 安全性经验法则: ajax
目前为止我作的最多的防止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请求安全的方法,欢迎评论。
即便没有读者,也要写博客。