ASPNET登陆总结
昨天晚上看了视频,今天早上起来就凭着记忆与视频里的代码试着做了一个登陆,基本功能是实现了。
0x0:首先,第一步是做一个界面。。。。直接扒别人做好的页面。。。。。各种改改路径啥的,用浏览器打开,恩,发现基本界面是对的就ok
0x1:解决验证码。添加一个一般处理程序ValidateCode。直接封装好了一个类,具体是使用GDI+实现的。类里面的方法直接返回了image/jpeg。然后在aspx界面代码里面加上JS代码,为验证码图片注册点击事件,每点击一次,就将src属性改变一次(在后面加1),重新请求一次。同时在这个一般处理程序实现的接口加上IRequiresSessionState,这个接口转到定义后发现是空的,就是起到一个标志的作用,可以使用Session。在ValidateCode.ashx的代码后面加上 context.Session["ValidateCode"] = strCode; 将这次生成的验证码记录到本次会话中。
0x2:Cookie。第一次请求的话,就将上次登录的用户名放到文本框中。
if (!IsPostBack)
{
//第一次请求从cookie中拿到上次登陆的用户名,并放到文本框中
LastLoginName = Request.Cookies["UserName"] == null ? string.Empty : Request.Cookies["UserName"].Value;
}
0x3:如果是IsPostBack的话,意味着这是一次登录请求,首先将现在登录的用户名写入cookie中:Request.Cookies["UserName"].Value = Request["txtClientID"];
然后校验验证码:
string requestCode = Request["txtCode"];
string sessionCode = Session["ValidateCode"] == null ? string.Empty : Session["ValidateCode"].ToString();
Session["ValidateCode"] = null;//匹配一次就清空
获得用户输入的验证码,存在会话中的验证码,然后清空会话中的验证码。
然后就可以拿这两个验证码进行校验,如果相同且都不为空,意味着验证码正确,可以进行用户名和密码的校验;如果两次验证码不一样或者为空,意味着验证码校验失败。(ps:为什么要清空会话中的验证码呢?是为了防止暴力破解,如果不清空的话,可以伪造http请求不停地试验证码。Burp Suite就可以很轻松的做到爆破~);
如果验证失败,可以在前台弹出一个提示。为了方便,直接在前台预留一个坑 <%= ShowMsg %>,在后台代码中添加属性ShowMsg。这样需要在这个坑里面写什么样的代码就都可以了。例如:(<script>alert('验证码输入失败!');</script>);
0x4:验证用户名密码就太简单了,BLL层里直接调用自己写的方法就ok了,方法返回结果是一个List<T>集合。如果成功了就直接Response.Redirect()跳转到后台主页面就行了,并且将这次成功的List<T>中的元素添加到Session中。失败的话就在ShowMsg坑里面弹弹弹,弹走鱼尾纹~
0x5:问题来了,我们登陆成功了就能跳转到主页面了,可是我们不登陆,直接在浏览器地址栏里面输入地址也是一样可以到达主页面的,这尼玛登陆就没有任何意义了,所有一定要做验证,如果不是登陆成功的会话请求就直接让他滚去登陆,直接Response.Redirect()到登陆页面。后台这样需要验证是否是登陆进来的请求实在是太多了,而且为了方便,我们直接生成一个类。
具体如何做?我们发现我们生成的aspx的Web窗体程序都是集成自System.Web.UI.Page类的。我们可以让我们自己生成的类集成System.Web.UI.Page这个类,然后让我们那些需要验证会话的那些web窗体继承我们自己生成的类,这样就相当于在web窗体和System.Web.UI.Page之间加了一层东西,我们就在这个加的一层里面动手脚。
我们在这个类里面加上一个属性。因为我们前面在Session内存里面储存的是list<T>里的元素,所以我们增加的属性的类型就是T,用来校验是否存在会话。代码如下:
public Model.HKSJ_USERS CurrentLoginUsers { get; set;}
protected void Page_Init(object sender, EventArgs e)
{
CurrentLoginUsers = Session["LoginUser"] as Model.HKSJ_USERS;
if (CurrentLoginUsers==null)
{
Response.Redirect("Login.aspx");
}
}
Page_Init 事件代表的是页面初始化,比Page_Load发生的还要早。web窗体继承了这个类,所以他们在页面初始化的时候就会校验是否存在会话。
0x6:在视频里面看到,会话过期的话,iframe标签跳转的话,会在iframe的地方直接跳转到登陆页面,形成嵌套的效果,简直丑陋!!以前入侵网站放上的大马,就是这样,一段时间不操作,就会那样嵌套,当时就觉得简直shit!!
我先是登陆进了后台,然后重新生成,按理说Session已经断开了,我也应该遇到那样的情况才对啊,可是现实不是这样的,我在后台还能继续操作,直接在浏览器地址栏Get请求才会跳转到登陆界面,由此可见,我的Session也是断开了才对啊~难道我在后台的那些操作没有经过Page_Init吗?可是视屏里面就是嵌套跳转了的啊?算了,我也不钻牛角尖了,以后肯定还会遇到的,现在先把解决方案贴出来:
<%--<script type="text/javascript">
if (window != window.top.window) {
window.top.window.location.href = "/Admin/Login.aspx";
}
</script>--%>
跳转的时候先看看自己是不是顶级窗口,如果不是,就让顶级窗口跳到登陆界面;如果是,那还费什么话啊,赶紧跳啊!
第一次写这样的博客,思路还是很乱的。。。写之前,我的思路还要更混乱,写着写着,思路渐渐的就理顺了一些,果然写博客还是有用处的!还有,就是花的时间有点多,不过这样的总结我觉得还是很有必要的。
转载于:https://www.cnblogs.com/yinmo/p/4203319.html
ASPNET登陆总结相关推荐
- Asp2.0下Login.Aspx页面和VS2005登陆控件冲突问题!
有句老话说,常在河边走,哪能不湿鞋,呵呵,今天终于让我遇到了. VS2005项目中,若有个页面文件是Login.aspx,即类名为Login,这样就会和VS2005中自带的登陆控件的类名起冲突,在本地 ...
- php mvc登陆注册,Asp.Net MVC 5使用Identity之简单的注册和登陆
[导读]由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单 ...
- 用Windows身份验证访问数据库时,出现“用户 'YSBY-PC\ASPNET' 登录失败。”,这YSBY是我的计算机名。...
用Windows身份验证访问数据库时,出现"用户 'YSBY-PC\ASPNET' 登录失败.",这YSBY是我的计算机名. 下面是我的搜集的解决办法,期望能对大家有所帮助. 第一 ...
- asp.net登陆数据库的错误解决
asp.net登陆数据库的错误解决 用户 'abc\ASPNET' 登录失败. > 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的 ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
- ASPNET使用Application实现在线聊天室
什么是application Application对象是HttpApplicationState类的一个实例,用于定义ASPNET应用程序中的所有应用程序对象所有的方法.属性和事件. HttpApp ...
- 20130620-异常详细信息: System.Data.SqlClient.SqlException: 用户 'PC-LIXIANG\ASPNET' 登录失败。
这个问题是由于验证模式引起的,SQL SERVER 2000中,选择混合模式为好.数据库的连接符串要指明验证模式.这个问题baidu一下一大堆. //************************* ...
- 路由器远程登陆配置:02多人登陆一台设备
前言: 新买来的路由器设备,一般会将路由器先用console线连接一台PC,console线的一端连接计算机网卡,一端连接路由器的console口,在PC端登录超级终端,通过console口管理路由器 ...
- 路由器远程登陆配置:01一个人登陆多台设备
前言: 在上一篇博客中,总结了在路由器远程登陆配置中,多人登录一台设备如何配置,但身为网管,这点功能是不够的,需要在网管中心能够同时管理多台设备! 所以,如何远程登录多台设备? 背景:现在网络故障,需 ...
最新文章
- 想去苹果做AI?看看你够不够格
- 语言用加法实现加饭运算_面试官:这个经典的并发问题用 Go 语言如何实现?...
- 2021年,AI能否进军加密领域?
- django ---- models继承
- PHP设置块注释的模板
- cocos2d-x游戏开发(六)自动释放池
- oracle 挖掘日志,Oracle 日志挖掘(LogMiner)使用详解
- docker 随笔记录
- linux block挂io,linux:在qemu中运行自编译内核:VFS:无法在未知的wn-block(0,0)上挂载root fs...
- 图标和文字跟着div比例放大缩小_【方法技巧】高考地理越来越重视基本概念的考查,看高中地理如何考查比例尺的判读和应用,附专项练习...
- java微服务架构师,兴业数金Java笔试题
- 思维导图之《机器视觉知识体系》
- html5播放器视频抓取,分享10款最棒的免费HTML5视频播放器
- 华南金牌x79支持服务器内存吗,迟来的评测:华南 金牌X79 主板,值不值得买?...
- 拼图游戏 java_Java拼图游戏源码
- 【学术】参考文献管理
- 电子计算器按键的功能
- 新手学开车,起步,停车,倒库移库,练习图解,开车基本技巧
- linux如何打印脚本运行进度,linux-如何在使用systemd引导期间最后运行并打印我的脚本输出?...
- gmssl国密sm2(生成密钥对-私钥签字-证书验签)
热门文章
- windows怎么下载安装python-windows下numpy下载与安装图文教程
- python while循环语句-Python While 循环语句
- 刚安装的python如何使用-python中RabbitMQ的使用(安装和简单教程)
- 用python画雪花-python使用turtle库与random库绘制雪花
- 下面不属于python第三方库的安装方法的是-python第三方库的pip安装方法
- java好还是python好-学python好还是java好
- python 数据分析学什么-python数据分析学什么?python数据分析入门
- python的软件叫什么-python是什么软件
- python基础代码-Python基础(代码)
- python课程内容-Python自学难吗?有哪些课程内容?