日期:2014-05-16  浏览次数:20671 次

今天很无聊,写了一个防止ajax代码恶意提交的程序
在使用ajax的时候,比如在做某个增加操作的时候,传值、请求都是通过js的,而通过一些浏览器调试工具,可以轻易篡改js代码,例如在代码外面套一个for循环,循环个100次,如果服务端没有做任何验证的话,而传递过来的又都是合法数据,那么就会毫不犹豫的执行100次新增。所以需要在服务端做一个判断,如果当前请求距离上一次请求的时间在3秒之内的话就提示操作频繁,拒绝操作。如果不是,那么就是合法请求了,可以执行代码。
代码如下:
 
C# code
Object[] obj = null;
        string userName = "a123";  //假定为session中取得的用户名
        if (Session["filter"] != null)
        {
            obj = (Object[])Session["filter"]; 
        }
        else {
            obj = new Object[] { userName, 1 };
        }
        long nowTime = Convert.ToInt64(DateTime.Now.ToString("yyyyMMddhhmmss"));
        long lastTime = Convert.ToInt64(obj[1]);
        if (nowTime - lastTime <= 3)
        {
            Response.Write("<script>alert('操作太过频繁!拒绝操作。')</script>");
            
        }
        else {
            //执行其他操作
            IList<Dictionary<String, String>> list = dao.GetList("test", Request);
            dao.replaceHtml(list, tb1);
        }
        Session["filt
er"] = new Object[] { userName, nowTime };

------解决方案--------------------
学写了
------解决方案--------------------
C# code,my god!
------解决方案--------------------
加上缓存。
双管下。
防调一次删一次cookies/根本没有保存cookies。
------解决方案--------------------
感谢楼主分享
------解决方案--------------------
探讨

加上缓存。
双管下。
防调一次删一次cookies/根本没有保存cookies。

------解决方案--------------------
探讨

因为考虑到cookie是可以在客户端被js篡改的,所以整个过程没有用到cookie
至于查询缓存的话,也可以通过该方法来考虑,如果检测通过,那么查询数据库,并生成静态页面,第二次来查询的话,如果在设定时间内就直接转发到生成的静态页面中,否则就查询数据库,并写入到页面上

------解决方案--------------------
太高深
------解决方案--------------------
学习了,呵呵