AJAX安全-Session做Token
个人思路,请大神看到了指点
个人理解token是防止扫号机或者恶意注册、恶意发表灌水,有些JS写的token算法,也会被抓出来被利用,个人感觉还是用会过期的Session做token更好,服务器存储,加载到客户端页面,然后进行对比
index.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="jquery.js"></script>
<script>
function submist() {
if ($("#HDToken").val() != null) {
var JsonData = {
Token: $("#HDToken").val(),
sid: Math.random()
}; $.ajax({
type: "post",
url: "index.ashx",
dataType: "json",
data: JsonData,
success: function (data) {
if (data[0].status == 'success') { alert("成功" + data[0].message); }
else {
alert("失败" + data[0].message); }
},
error: function (data, status, e) {
alert("系统错误" + status + "|" + data[0].message); }
});
}
else {
alert("回话过期,重新刷新页面");
return;
}
} </script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="HDToken" type="hidden" runat="server" />
<input id="Button1" type="button" value="提交" onclick="submist()"/>
<asp:Button ID="Button2" runat="server" Text="清除" onclick="Button2_Click" />
</div>
</form>
</body>
</html>
index.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ if (!IsPostBack)
{
string Token = "";
if (Session["Token"] == null)
{
Session["Token"] = DateTime.Now.ToString();
Token = Session["Token"].ToString();
HDToken.Value = FormsAuthentication.HashPasswordForStoringInConfigFile(Token, "md5").ToLower();//MD5加密后赋值给隐藏域
//Response.Write(HDToken.Value); }
else
{
Token = Session["Token"].ToString();
HDToken.Value = FormsAuthentication.HashPasswordForStoringInConfigFile(Token, "md5").ToLower();
// Response.Write(HDToken.Value); //以下为回话过期,可以放在Global.asax 做定时器
TimeSpan span=DateTime.Now.Subtract(Convert.ToDateTime(Session["Token"]));
int min = span.Minutes + ;
if (min > )
{
Session.Remove("Token");//时间大于1分钟,移除
}
} }
}
protected void Button2_Click(object sender, EventArgs e)
{
Session.Abandon();
}
}
index.ashx
<%@ WebHandler Language="C#" Class="index" %> using System;
using System.Web;
using System.Web.Security;
using System.Web.SessionState; public class index : IHttpHandler, IRequiresSessionState
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string Token = context.Request["Token"];//获得隐藏域的值
if (context.Session["Token"] != null)
{ if (FormsAuthentication.HashPasswordForStoringInConfigFile(context.Session["Token"].ToString(), "md5").ToLower() == Token)
{
context.Response.Write("[{\"message\":\"成功\",\"status\":\"success\"}]");
context.Response.End();
return;
}
else
{
context.Response.Write("[{\"message\":\"失败\",\"status\":\"error\"}]");
context.Response.End();
return;
}
}
else
{
context.Response.Write("[{\"message\":\"过期\",\"status\":\"error\"}]");
context.Response.End();
return;
} } public bool IsReusable {
get {
return false;
}
} }
另一种方法,在请求头部加入token
if (!IsPostBack)
{
///生成 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);
}
在请求结果页面直接获得string Token = context.Request.Headers["token"];
AJAX安全-Session做Token的更多相关文章
- 第八节:常见安全隐患和传统的基于Session和Token的安全校验
一. 常见的安全隐患 1. SQL注入 常见的案例: String query = "SELECT * FROM T_User WHERE userID='" + Request ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...
- cookie、session和token的概念
Cookie.Session和Token都是为了解决Web身份校验而产生的,这里对它们的概念做一个简单了解. Web身份校验的发展 很久很久以前,Web基本上就是文档的浏览而已.既然是浏览,作为服务器 ...
- 理解cookie,session,token
彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...
- [转帖]彻底理解cookie,session,token
彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...
- 关于新手必须要理解的几个名词,cookie、session和token
以下要说的,虽然不是开发过程中必须会遇到的,但却是进阶之路上必须要掌握的,一些涉及到状态管理与安全的应用当中尤为重要. 我之前虽略有学习,但也是东拼西凑临时看的一点皮毛,所以在这个假期利用一点时间,整 ...
- 3 分钟带你深入了解 Cookie、Session、Token
经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...
- cookie、session与token
一.详述概念 1.Cookie机制 cookie机制是采用在客户端保持状态的方案(cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力).cookie的使用是由浏览器按照一定的原则在后台自 ...
- 小白必读:闲话HTTP短连接中的Session和Token
本文引用了刘欣的文章,感谢原作者的分享. 1.引言 Http协议在现今主流的IM系统中拥有无可替代的重要性(在IM系统中用HTTP发起的连接被大家简称为http短连接),但Http作为传统互联网信息交 ...
随机推荐
- OpenCV 读取.xml文件
OpenCV 只提供了读取和存储.xml和.yml 文件格式的函数. 读取.xml文件的C++例程如下: cv::FileStorage fs; //OpenCV 读XML文件流 cv::Mat De ...
- 使用Zipalign工具优化Android APK应用记录
生成的Android应用APK文件最好进行优化,因为APK包的本质是一个zip压缩文档,经过优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗.我们可以使用Zipalign工具进行A ...
- 用linq实现登陆功能
BLL层的逻辑代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; name ...
- java_Hashtable实例
package ming; import java.util.Hashtable; class D { int count; public D(int count) { this.count = co ...
- IIS 之 启用日志记录
如何为网站启用日志记录或 在 Microsoft Internet Information Services (IIS) 6.0 中,在 IIS 5.0 中,并在 IIS 4.0 中的FTP 站点.可 ...
- Asp.Net 之 当前上下文中不存在名称" Server "
在开发中经常用到应用程序的物理路径,在获取应用程序中文件的物理路径时最常用: string path = Server.MapPath("Document/example.doc" ...
- 从Eclipse里导出Android程序到手机里
参考自:http://wenku.baidu.com/view/e28bb57c1711cc7931b716a7.html
- hackerrank Day15: Linked List
#include <iostream> #include <cstddef> using namespace std; class Node { public: int dat ...
- JAXB - Annotations, The Annotation XmlElement
The basic annotation for a field that's intended to be an element is XmlElement. It permits you to d ...
- asp图片化电话号码,避免蜘蛛之类爬走用户隐私
作用:将页面中的电话号码生成图片格式.挺多的分类信息类网站使用这个功能.不用真正的生成图片.原理类似验证码,挺不错的. <% Call Com_CreatValidCode(Request.Qu ...