专栏首页平凡少年Ajax请求安全性讨论

Ajax请求安全性讨论

 今天我们来讨论一下ajax请求的安全性,我相信各位在系统开发过程中肯定会绞尽脑汁的想怎样可以尽量少的防止伪造ajax请求进行攻击,尤其是开发跟用户交互比较多的互联网系统。那么就请大家来分享讨论一下你在开发过程中怎样考虑ajax安全及防止ajax请求攻击的问题。我也是一个新手,就先抛砖引玉了,写的不对的地方欢迎批评指正。

我先上两段网摘

Ajax安全防范的方法:

  1. 判断request的来源地址。这样的方式不推荐,因为黑客可以更改http包头,从而绕过检测。
  2. 采用验证码。也不推荐,请各位大大想一下用户的感受,刚输入用户名就让我输入注册码?这样Ajax意义何在?
  3. 给一个IP在一个小时内,分配一些份额,比如500个(考虑到网吧等等多台机器一个IP,使用NAT的地方)。

Ajax 安全性经验法则:

  1. 如果你使用身份验证, 确定你在请求页上检查!
  2. 为 SQL 注入检查。
  3. 为 JavaScript 注入检查。
  4. 保留商务逻辑在服务器上!
  5. 不要假设每个请求是真正的!
  6. 确认检查数据!
  7. 审查请求的数据而且确定它是正确的。

目前为止我做的最多的防止ajax请求攻击的就是添加验证码添加随机Token限制同一请求在规定时间内的最大请求数量服务器端校验数据正确性、尽量使用POST方法

下面我写一个在ajax请求的http头中添加一个随机Token来增加ajax请求的安全性。

1、使用  $.ajaxSetup和setRequestHeader方法为所有的ajax请求的Http头添加一个随机Token值

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

这段js代码可以放在母板页中,token值随着页面的加载生成并放在session中,这样页面中的其他ajax进行请求时就会在Http头中添加token:XXXXXXX的键值对。我们就可以在后台获取该token值并与session中的值对比,相等则为合法的请求。

2、Token生成。

 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);

3、新建DataService.ashx

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("请求合法§");
            }
        }

4、测试Ajax请求

$.post("DataService.ashx", function (json) {

                alert(json);

            });

打开FireBug查看请求,发现多了一个token的值

如果你有什么好的能保证ajax请求安全的方法,欢迎评论。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技巧|高效使用 JavaScript 闭包——避免 Node.js 应用程序中的内存泄漏

    在 Node.js 中,广泛采用不同形式的闭包来支持 Node 的异步和事件驱动编程模型。通过很好地理解闭包,您可以确保所开发应用程序的功能正确性、稳定性和可伸...

    疯狂的技术宅
  • jQuery Ajax同步参数导致浏览器假死

    98k
  • 有效使用 Node.js 事件循环

    对于 Node.js 应用程序开发新手而言,作为学习曲线的一部分,他们需要了解单线程事件循环的工作原理,以及它可能导致意外结果的方式。您可以使用本教程中的 3 ...

    疯狂的技术宅
  • LayUI switch 开关监听 获取属性值、更改状态

    用户3056046
  • nginx、swoole高并发原理初探

    阻塞与非阻塞的重点在于进/线程等待消息时候的行为,也就是在等待消息的时候,当前进/线程是挂起状态,还是非挂起状态。

    猿哥
  • 一个诡异的IE10的Bug

    今天突然遇到这么个诡异的问题,客户反映,在IE10下,某功能不能给返回提示。查了下,这地方是用的jquery的ajax方法,在success中使用了alert显...

    徐大嘴
  • 从构建分布式秒杀系统聊聊验证码

    为了拦截大部分请求,秒杀案例前端引入了验证码。淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让...

    java架构师
  • jQuery笔试题汇总整理--2018

    1、最大的一点是页面无刷新,用户的体验非常好。 2、使用异步方式与服务器通信,具有更加迅速的响应能力。 3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户...

    用户1272076
  • HTML5 Web Worker的使用

    Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。

    疯狂的技术宅
  • Spring Mvc的跨域解决方案

    一句话:同一个ip、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就是跨域。

    良月柒

扫码关注云+社区

领取腾讯云代金券