使用AuthToken架构保护用户帐号验证Cookie的安全性

博客内容讨论了使用FormsAuthentication的GetAuthCookie可能存在安全隐患,因为黑客可以利用不变的UserID或UserName来冒充用户。作者提出了AuthToken的概念,这是一种每次登录时都会变化的验证Token,以提高安全性。数据库设计包括UserID、AuthToken、SessionID和ExpireTime四个字段,其中UserID和AuthToken构成联合主键。通过SessionID检查AuthToken的有效性和过期时间,确保即使黑客拥有完整的Cookie信息,也无法长期使用已过期的AuthToken进行非法操作,从而增强了账号安全性。

在项目或者网站开发中,我们很多人很多时候喜欢使用微软的FormsAuthentication类的GetAuthCookie函数生成需要在访客客户端放置的帐号校验Cookie,这个本身没问题,但是很多人会被GetAuthCookie的userName参数误导,以为传递UserID或者UserName就很安全了.而实际上,Cookie本身并不安全,如果完整复制了校验Cookie,在Cookie的允许时间范围内,黑客完全可以使用该Cookie代表的帐号做各种危害网站和应用的事情,即使设定了Cookie的过期时间,但是如果完整复制该Cookie信息,由于站点的machineKey基本不会变化,每次基于特定用户的UserID和UserName生成的Cookie实际上一直不变,那么黑客只要保留了该全部Cookie的信息,就可以一直为所欲为,不受用户登录帐号和密码变更限制,比如校内曾经发生过xss脚本注入事件,导致很多用户丢失了日记照片.所以保护帐号校验Cookie很重要.
 
解决方案是避免使用UserID和UserName这种不会变化的字段做为验证Cookie的基础,我建议使用一种我称之为AuthToken的机制,意即验证Token,(token:标志,象征),AuthToken可以随每次用户通过登录页面登录变化,保证用户的顺畅使用,同时又避免无限期使用不变的验证Cookie导致的帐号被盗现象的发生.
 
下面来解释下AuthToken的运作模式,先上数据库设计图,大家看图理解.

 

 

这张表的字段分别是
UserID:用户标识
AuthToken:验证Token
SessionID:客户端SessionID
ExpireTime:绝对过期时间
 
请注意UserID和AuthToken为合并主键,这并不是错误,而是有意的设计,大家听我解释
首先每个客户端的浏览器我们都会获得一个SessionID,这个是肯定有的,而且同一台机器不同浏览器生成的sessionID也是不同的,sessionID的解释大家看维基百科http://en.wikipedia.org/wiki/Session_ID
然后服务器首先基于回话的SessionID检查用户的客户端是否有AuthToken,如果没有,那很好,用户还没有登录;如果有,那么检查ExpireDate是否过期,如果过期,那么用户需要再次登陆.因为是基于SessionID的判断,所以不同客户端和不同的浏览器生成的sessionID都是不同的,同时因为UserID和AuthToken都为主键,所以可以针对同一个帐号分别设置登录过期时间,比如你在网吧上网,使用的是网站默认设置的20分钟过期时间,在家里设置的是2个星期不用登陆,在单位设置的是3天内不用登陆,虽然Cookie是按照你的设置到期自动清除处理的,但是如果黑客保留住了你全部的Cookie信息,在以往的架构里,设置多长时间对黑客都是没用的,但是在AuthToken架构里,Cookie和数据库的记录对应,所以安全性大大增加,即使黑客保留了你全部的Cookie信息,但是因为数据库中记录了特定的AuthToken的过期时间,而且和SessionID对应,就算挠破了头,黑客也是没有办法使用你的帐号的,这个要安全多了.

<think>嗯,用户想知道如何使用authtoken来登录和配置natapp。首先,我需要回忆一下natapp的相关文档。记得用户提到了引用中的内容,特别是引用[2]提到authtoken是隧道的登录凭证,运行natapp时需要用到它。还有引用[4]提到可以通过命令行参数或者配置文件来设置authtoken。 首先,用户需要注册natapp账号并获取authtoken。根据引用[3]和引用[5],注册后需要购买或获取免费隧道,这样就能得到authtoken。然后,用户需要下载natapp客户端,这可能是在Linux或Windows系统上,但用户给出的示例代码是Linux的,所以可能需要考虑不同系统的步骤。 接下来,配置authtoken有两种方法:命令行直接运行或者使用配置文件。命令行方式比较简单,直接输入natapp -authtoken=你的token,如引用[2]中的例子。而配置文件方式,用户需要创建一个config.ini文件,放在natapp同级目录下,并在里面写入authtoken信息,如引用[4]所述。这里要注意的是,如果同时使用命令行和配置文件,命令行的参数会覆盖配置文件中的设置。 然后,用户可能需要启动natapp,这时候会根据配置穿透内网,生成公网访问地址。测试运行时需要确保本地项目已经启动,并且端口和隧道配置一致,比如引用[3]提到的建立一个web项目,运行在本地8080端口,然后natapp映射到公网地址。 可能用户会遇到的问题包括权限问题,比如在Linux下需要chmod +x natapp来赋予执行权限,如引用[1]所述。另外,配置文件的位置和格式是否正确也很重要,避免语法错误。 还需要提醒用户注意authtoken的保密性,不要泄露,否则别人可能滥用。另外,免费隧道可能有带宽或连接数的限制,如果需求高可能需要升级套餐。 最后,生成相关问题时要覆盖常见的使用场景、配置优化、错误处理等,比如如何验证配置正确、如何查看日志、如何处理代理问题等。</think>### Natapp通过authtoken登录的配置教程 以下是基于官方文档整理的配置步骤[^3][^4]: #### 一、获取authtoken 1. **注册并登录**Natapp账号(https://natapp.cn) 2. 进入**隧道管理**,创建或选择已有隧道 3. 在隧道详情页复制**authtoken**值(格式如:`9ab6b9040a624f40`)[^2] #### 二、配置authtoken(两种方式) **方式1:命令行直接运行** ```bash # Linux示例(需先赋予执行权限[^1]) chmod a+x natapp ./natapp -authtoken=你的authtoken ``` **方式2:配置文件启动** 1. 创建`config.ini`文件,内容如下: ```ini [default] authtoken=你的authtoken # 粘贴实际值 loglevel=INFO # 日志级别 log=stdout # 输出到控制台 ``` 2. 将文件与`natapp`客户端放于同一目录 3. 直接运行客户端: ```bash ./natapp ``` #### 三、启动与验证 1. 运行后控制台会显示**公网访问地址**(如:`http://xxx.natappvip.cc`) 2. **本地服务需同步启动**(如本地Web项目运行在`127.0.0.1:8080`) 3. 通过公网地址访问验证穿透是否成功 > ⚠️ 注意:若同时使用命令行参数和配置文件,命令行参数优先级更高
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值