首页 新闻 会员 周边 捐助

.net form认证问题

0
悬赏园豆:50 [待解决问题]

我们都知道form认证默认生成的cookie名称是aspxauth,我现在遇到一个问题,我本地有两个项目,都是用的form认证,调试用的是vs自带的iis程序,地址都是localhost,他们只是端口号不同,我一个项目登录通过后,另外一个项目本该需要登录的因为前一个项目已经生成了认证cookie导致第二个项目直接不需认证了,我感觉这是个安全性问题,如何能避免这个问题?

如果internet的一个站点用的这种认证方式,我在想是不是可以改host文件把外网的域名映射到本地绕过这个认证?

danielduan的主页 danielduan | 初学一级 | 园豆:61
提问于:2017-01-13 10:15
< >
分享
所有回答(4)
0

你的认证在服务器上应该还有session认证部分的。cookie只是附带一部分信息。sessionid是匹配客户端请求。

 

纯cookie验证是会被伪造的

 

微软自带项目里生成的都是附带了服务器session验证部分的。

他先生成一个验证票据存放起来,然后加密后放入cookies里返回客户端,使得下次用户在有效期里不需要重新登录。

心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-13 10:22
0

你在后面那个站点的web.config中加个sessionState节点,配下cookieName

你上正式了做两个站点就没这个问题了

Daniel Cai | 园豆:10424 (专家六级) | 2017-01-13 10:37
0

自己baidu了一下,大概摸情了原理,.net对认证cookie的加密会用到machinekey,machinekey 可以在web.config里配置,但一般不会去配置它, machinekey默认是自动生成的,每台机器都不一样,我本地的两个项目能共享认证信息是因为machinekey一样,所以我问题最下面的假设没有意义。。

danielduan | 园豆:61 (初学一级) | 2017-01-13 10:52

不是,即使machinekey一样,也不行的。在同一个iis上部署两个网站。使用不同的域名。默认情况也不行的,不会互通的,因为cookie有作用域问题。

支持(0) 反对(0) 心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-13 10:58

@心雨纷扬: session所使用的cookie有httponly的限制。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2017-01-13 11:20

@心雨纷扬: 是的,我的两个本地的站点是localhost,域名一样,所以可以共享,域名不一样肯定不行

支持(0) 反对(0) danielduan | 园豆:61 (初学一级) | 2017-01-13 13:48
0

cookie有个域问题的。你cookie的domain是什么?cookie是可以共享的。

盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 11:20

cookie的域问题我是知道的,所以我后面那个假设就是想通过改host文件生成模拟域名下的cookie,因为机器的machinekey不同,我就算是模似写入了cookie也没有意义

支持(0) 反对(0) danielduan | 园豆:61 (初学一级) | 2017-01-13 13:50

@danielduan: host文件生成模拟域名下的COOKIE,数据你服务器能认证通过?

你的COOKIE没有加密?跟本没有这方面的问题。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 13:51

@盟怀部孩: 不是,我的意思是这样,假设www.abc.com下的网站也是.net网站,并且也是form认证,

我把www.abc.com改host为127.0.0.1,这样我再访问www.abc.com就是访问我本地的项目,我本地的项目也是form认证,我登录之后就是生成认证cookie了嘛,因为machinekey的问题,加密结果不一样,事实上也没有意义

支持(0) 反对(0) danielduan | 园豆:61 (初学一级) | 2017-01-13 15:45

@danielduan: 你最后还是把自己说服了,好样的。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 15:48

@danielduan: 你担心这个,还不如担心,JS其实也可以写入COOKIE,现在的浏览器在开发者工具里就可以了写JS。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 15:49

@danielduan: 但是你的本地服务器里并没有对应sessionid,所以也是没法通过的。

支持(0) 反对(0) 心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-13 16:06

@心雨纷扬: sessionid也是COOKIE之一。你只要注意,COOKIE是可以复制的,就对了。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 16:07

@盟怀部孩: 。。。。session是服务端验证的。。是我读书少了么。。。。

支持(0) 反对(0) 心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-13 16:31

@心雨纷扬: 你上面写了sessionid了,服务器怎么知道你用的是哪个session?当然是通过sessionid这个cookie来识别。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 16:57

@心雨纷扬: 比如这样,你登录了系统,然后系统给你SESSION和cookie,然后你可以复制这些cookie到别的浏览器里。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 16:58

@盟怀部孩: 你说的然并卵。。。去其他浏览器是会产生新的sessionid的。

支持(0) 反对(0) 心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-13 17:00

@心雨纷扬: 我可以用JS改掉他。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 17:00

@心雨纷扬: 你想想。现在双核心浏览器里面的用户cookie是怎么共享的。那可是两个浏览器内核的之间切换

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 17:01

@盟怀部孩: 问题主人是想跨站点使用cookie伪造登录。

前面也有人说过了,目前form认证的cookie是httponly的,无法使用js简单操控。

还有就是最重要的,我们的问题是防止别人假冒登录,你已经登录成功了的sessionid,即便你能够弄到其他浏览器里使用,也不是别人假冒登录啊,是你自己折腾自己。

 

还有,我没有用双核心的浏览器, 你可以试试把博客园的登录信息在两个浏览器里同步看看,就是先在A浏览器里登录,然后你在B浏览器里先清空缓存,cookie,后再用你说的js折腾,看看能不能不输入用户名和密码登录进去。我没有试过,只是猜不行。

支持(0) 反对(0) 心雨纷扬 | 园豆:309 (菜鸟二级) | 2017-01-13 17:12

@心雨纷扬: 你只要了解服务器是怎么区别一个用户的唯一标识的就可以了。web端是获取不到唯一标识,就算取到了,也是可以修改的。

支持(0) 反对(0) 盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-16 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册