当前位置: 首页 > 编程日记 > 正文

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 + 1;if (min > 1){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){///生成 Tokenstring 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"];

转载于:https://www.cnblogs.com/qigege/p/4828289.html

相关文章:

跨平台PHP调试器设计及使用方法——使用

经过之前六篇博文的分析和介绍&#xff0c;大家应该对这套调试器有个初步的认识。本文我将讲解它的使用方法。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 上图是该软件界面的布局&#xff0c;我们之后的讲解也将围绕着这些功能展开。 文件夹管理 在查看一…

管理7k+工作流,月运行超10000万次,Lyft开源的Flyte平台意味着什么?

作者 | Allyson Gale译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】Flyte 平台可以更容易的创建并发&#xff0c;可伸缩和可维护的工作流&#xff0c;从而进行机器学习和数据处理。Flyte 已有三年多的训练模型和数据处理经…

Jmeter组件执行顺序与作用域

一、Jmeter重要组件&#xff1a; 1&#xff09;配置元件---Config Element&#xff1a;  用于初始化默认值和变量&#xff0c;以便后续采样器使用。配置元件大其作用域的初始阶段处理&#xff0c;配置元件仅对其所在的测试树分支有效&#xff0c;如&#xff0c;在同一个作用域…

跨平台PHP调试器设计及使用方法——拾遗

之前七篇博文讲解了跨平台PHP调试器从立项到实现的整个过程&#xff0c;并讲解了其使用方法。但是它们并不能全部涵盖所有重要内容&#xff0c;所以新开一片博文&#xff0c;用来讲述其中一些杂项。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 触发调试的…

召唤超参调优开源新神器:集XGBoost、TensorFlow、PyTorch、MXNet等十大模块于一身...

整理 | 凯隐编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】Optuna是一款为机器学习任务设计的自动超参数优化软件框架&#xff0c;是一款按运行定义(define-by-run) 原则设计的优化软件&#xff0c;允许用户动态地调整搜索空间&#…

Linux下的Silverlight:Moonlight 1.0 Beta 1发布了

Moonlight是微软Silverlight的一个开源实现&#xff0c;其目标平台是Linux与Unix/X11系统。自从2007年9月开始&#xff0c;Moonlight就在Mono项目下进行了开发&#xff0c;它是由Novell发起并资助的。现在&#xff0c;Moonlight 1.0 Beta 1已经向公众发布了。 Novell和Mono宣布…

在visual studio 2010中调用ffmpeg

转自&#xff1a;http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html 最近几天一直在折腾ffmpeg&#xff0c;在网上也查了许多资料&#xff0c;费了不少劲&#xff0c;现在在这里和大家分享一下。 一、准备工作本来是想自己在windows下编译ffmpeg生成lib、dll等库文件的&am…

无线路由器与无线AP的区别

摆脱线缆的羁绊&#xff0c;手捧一杯香醇的咖啡在家中的任何角落都可以无拘无束和网友谈天说地──这就是无线的魅力&#xff01;在无线网络迅猛发展的今天&#xff0c;无线局域网&#xff08;Wireless Local-Area Network&#xff0c;简称WLAN&#xff09;已经成为许多SOHO家庭…

Simple Dynamic Strings(SDS)源码解析和使用说明一

SDS是Redis源码中一个独立的字符串管理库。它是由Redis作者Antirez设计和维护的。一开始&#xff0c;SDS只是Antirez为日常开发而实现的一套字符串库&#xff0c;它被使用在Redis、Disque和Hiredis等作者维护的项目中。但是作者觉得这块功能还是比较独立的&#xff0c;应该让其…

“不会Linux,到底有多危险?”骨灰级成程序员:基本等于自废武功!

说起程序员的必备技能&#xff0c;我想大家都可以说很多&#xff0c;比如&#xff1a;算法、数据结构、数学、编程语言等等。对于程序员来讲&#xff0c;这些底层能力固然重要&#xff0c;但是&#xff0c;工具同样也是如此&#xff0c;比如常被大家所忽视的&#xff1a;Linux。…

“Uncaught TypeError: string is not a function”

http://www.cnblogs.com/haitao-fan/archive/2013/11/08/3414678.html 今天在js中写了一个方法叫做search()&#xff0c;然后点击按钮的时候提示&#xff1a; “Uncaught TypeError: string is not a function” 百思不得其解啊&#xff0c;我的js木有问题啊啊.... 后来才发现酱…

关于Nikon Ai AF 28mm F1.4D遮光罩的问题

-- 好不容易找到百变妖&#xff0c;确实比较妖&#xff01;&#xff01;遮光罩不好找&#xff0c;原厂推荐的HK-7基本属于古董中的古董。 爬文很久&#xff0c;终于找到一篇国外的介绍&#xff0c;说可以用HK-4代替&#xff0c;比HK-7效果更好&#xff0c;而且可以用85mm 1.4D-…

Simple Dynamic Strings(SDS)源码解析和使用说明二

在《Simple Dynamic Strings(SDS)源码解析和使用说明一》文中&#xff0c;我们分析了SDS库中数据的基本结构和创建、释放等方法。本文将介绍其一些其他方法及实现。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 字符串连接 SDS库提供下面两种方法进行字符串…

亚马逊机器学习服务:深入研究AWS SageMaker

作者 | Manish Manalath译者 | Shawn编辑 | Carol出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09; 机器学习是一个从数据中发现模式的强大概念。但是&#xff0c;如果您尝试过从零开始构建机器模型&#xff0c;那么您一定知道设计一个可扩展的机器学习工作流是多大的…

Java Timer 定时器的使用

一、延时执行首先&#xff0c;我们定义一个类&#xff0c;给它取个名字叫TimeTask&#xff0c;我们的定时任务&#xff0c;就在这个类的main函数里执行。 代码如下&#xff1a;package test;import java.util.Timer;public class TimeTaskTest { public static void main(Str…

Redis源码解析——前言

今天开启Redis源码的阅读之旅。对于一些没有接触过开源代码分析的同学来说&#xff0c;可能这是一件很麻烦的事。但是我总觉得做一件事&#xff0c;不管有多大多难&#xff0c;我们首先要在战略上蔑视它&#xff0c;但是要在战术上重视它。除了一些高大上的技术&#xff0c;我们…

asp.net客户端脚本验证小技巧

通用的客户端脚本验证 Code//验证客户端function checkclient() { var list document.all; for(var i0 ;i<list.length; i) { var h list[i].hint; if(h ! null && h ! "") { if(list[i].isdrop"…

5个可以帮助你提高工作效率的新AI工具

作者 | Kyrylo Lyzanets译者 | 火火酱编辑 | Carol出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09; 毫无意义的新闻、故事和活动会占用你每天多少的工作时间&#xff1f;假如你是一名需要高绩效的高管或专业人士&#xff0c;如果在工作中可以不分心&#xff0c;那你…

Centos6.5更换163源 epel源

想必大家都遇到过&#xff0c;安装新的centos系统&#xff0c;使用yum去安装软件的时候&#xff0c;要么找不到&#xff0c;要么慢的让人发疯。网上其实办法很多&#xff0c;直接更换163源就ok&#xff0c;但是基本所有的文章都是直接wget下163的源&#xff0c;但是不知道为什么…

图模型+Bert香不香?完全基于注意力机制的图表征学习模型Graph-Bert

作者 | Jiawei Zhang、Haopeng Zhang、Congying Xia、Li Sun译者 | 凯隐编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】本文提出了一种全新的图神经网络 Graph-Bert&#xff0c;仅仅基于 Attention 机制而不依赖任何类卷积或聚合操作…

闭关纪要17.Google app engine的简单应用

在上面用了十一篇博客的文章详细的介绍了&#xff0c;Step1账户登录系统之后&#xff0c;从现在开始&#xff0c;继续写闭关纪要&#xff0c;因为Step1账户登录系统也是闭关工作的一部分&#xff0c;因此保留序号&#xff0c;这篇纪要在上次的闭关纪要5.WML,UTF-8,BOM,签名及其…

Redis源码解析——内存管理

在《Redis源码解析——源码工程结构》一文中&#xff0c;我们介绍了Redis可能会根据环境或用户指定选择不同的内存管理库。在linux系统中&#xff0c;Redis默认使用jemalloc库。当然用户可以指定使用tcmalloc或者libc的原生内存管理库。本文介绍的内容是在这些库的基础上&#…

poj_2479 动态规划

题目大意 给定一列数&#xff0c;从中选择两个不相交的连续子段&#xff0c;求这两个连续子段和的最大值。 题目分析 典型的M子段和的问题&#xff0c;使用动态规划的方法来解决。 f[i][j] 表示将A[1...i] 划分为j个不相交连续子串&#xff0c;且A[j]属于第i个子串&#xff0c;…

Redis源码解析——字典结构

C语言中有标准的字典库&#xff0c;我们可以通过pair(key,value)的形式存储数据。但是C语言中没有这种的库&#xff0c;于是就需要自己实现。本文讲解的就是Redis源码中的字典库的实现方法。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 一般情况下&#xf…

十步,教你把Python运行速度提升 30%

作者 | Martin Heinz译者 | 陆离编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】一直以来&#xff0c;诟病 Python语言的人经常说&#xff0c;他们不想使用的一个原因是 Python 的速度太慢了。不管使用哪一种编程语言&#xff0c;程序…

字符串转换成NSDate类型的 为nil解决方法

方法一 通过下列函数来解决 但是得到的日期会改变 修改方法fix- (NSDate *)timeForString:(NSString *)string {NSMutableString *timeString [[NSMutableString alloc] initWithString:string]; [timeString setString:[timeString stringByReplacingOccurrence…

Redis源码解析——字典基本操作

有了《Redis源码解析——字典结构》的基础&#xff0c;我们便可以对dict的实现进行展开分析。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 创建字典 一般字典创建时&#xff0c;都是没有数据的&#xff0c;但是字典类型需要确定&#xff0c;所以我们看到R…

[转]控制 Cookie 的作用范围

默认时&#xff0c;网站的所有 Cookies 都一起被存储在客户端&#xff0c;并且所有 Cookies 连同网站的任何请求一起被发送到服务器。换句话说&#xff0c;网站中的每个页面都能够为网站获取所有的 Cookies。但是&#xff0c;你能够通过两个方式来设置 Cookies 的作用范围&…

强化学习70年演进:从精确动态规划到基于模型

作者 | Nathan Lambert译者 | 泓礼编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】这是一份帮你了解强化学习算法本质的资源&#xff0c;无需浏览大量文档&#xff0c;没有一条公式&#xff0c;非常适合学生和研究人员阅读。作为强化学习研究人员…

Android ActionBar相关

1.Android 5.0 删除ActionBar下面的阴影 于Android 5.0假设你发现的ActionBar下面出现了阴影&#xff0c;例如&#xff0c;下面的设置&#xff0c;以消除阴影&#xff1a; getActionBar().setElevation(0); Android 5.0之前能够用以下代码消除阴影&#xff1a; <item name&q…