niuniu502

c#.net,aspx,Web,Ajax交流
随笔 - 130, 文章 - 0, 评论 - 252, 引用 - 0
数据加载中……

[net2.0] ASPNET内置安全认证架构 的灵异问题~~~~

本人在一个项目中使用了ASPNET内置安全认证架构,感觉十分良好,测试也挺正常,但随着项目上线,我发现了一个奇怪的问题,比如A用户在这边登陆了,然后B用户也登陆了(不同的网段或同网段),而在某种特定的条件下(至于什么条件本人还没搞出来,很没责任心)B用户在登陆时会诡异的获得A用户的身份票证,(假设A用户是个超级管理员)这。。。这会出人命的啊,园子里什么鸟都有,肯定有遇到过类似的问题的大鸟,请指点一二,小弟拜上!


--------------------------------------
真正的 解决方案:
(实际上KernelOutputCache被禁用后,COOKIES依然会被分发到不同的用户主机上,也就是说所谓的MS的解决方案对偶一点用页没,当你放弃对MS的期望后,思路却一下开拓了许多,一个异常简单却有效的解决方法,用一个IFRAME包住需要产生COOKIE的部分(例如登陆)就OK了,我原来的登陆是使用AJAX,所以直接作为控件包容在页面中,在IFRAME部分的页面是不被缓冲的,所以不会受到
KernelOutputCache的任何影响!

症状

考 虑以下方案。 Microsoft ASP.NET 页包含 < % OutputCache % > 指令。 此外, ASP.NET 页面生成包含 Cookie 设置 - 响应一个 HTTP 头。 在此方案, HTTP 协议堆栈 (HTTP.sys) 内核缓存 Microsoft Internet Information Services (IIS) 6.0 中存储 ASP.NET 页。 因此, 谁访问同一页多用户可能收到相同 Cookie。


替代方法

要解决此问题, 根据适合您情况使用下列方法, 之一。


方法 1: 禁用内核缓存模式

可禁用缓存整个系统, 内核模式或者您可以禁用内核模式对于特定 ASP.NET 应用程序缓存。 此方法解决首选方法是因为仍可使用输出缓存 ASP.NET 应用程序中。 要禁用内核缓存模式, 请按照下列步骤:
1. 如果要禁用缓存整个系统, 内核模式打开 Machine.config 配置文件。 此文件位于以下文件夹中:
驱动器 : \WINDOWS\Microsoft .NET\Framework\ Version \CONFIG
注意 驱动器 是代表操作系统安装驱动器占位符。 版本 是一个占位符, 代表已安装 Microsoft.NET 框架的版本号。

如果要禁用缓存为特定 ASP.NET 应用程序, 内核模式打开 Web.config 配置文件。 此文件位于 ASP.NET 应用程序文件夹中。
2. 在配置文件, 找到 < httpRuntime > 元素, 并然后添加以下属性:
enableKernelOutputCache = " false "


方法 2: 禁用特定 ASP.NET 页面中输出缓存

禁 用特定 ASP.NET 页面生成包含 Cookie 设置 - 响应一个 HTTP 头中输出缓存。 但是, 必须确定整个应用程序可能生成一个 Cookie 中每个 ASP.NET 页。 例如, 如果使用 Cookie 来维护会话状态, 用户访问任何页面可能生成一个 cookie。

要 禁用特定 ASP.NET 页面, 中输出缓存从任何 .aspx 文件, 您不想缓存删除 < % OutputCache % > 指令。 有关 < % OutputCache % > 指令在 ASP.NET 页, 请访问 Microsoft Developer Network (MSDN) Web 站点: http://msdn2.microsoft.com/en-us/library/zd1ysf1y(VS.80).aspx

posted on 2008-04-01 10:12 LT 阅读(1834) 评论(13)  编辑 收藏 所属分类: net,C#,ASPNET

评论

#1楼 [楼主]   回复  引用  查看    

超级郁闷
2008-04-01 10:18 | LT      

#2楼    回复  引用  查看    

很灵异很诡异,我从来没有用过.NET内置的安全机制.每次都是重新造轮子
2008-04-01 10:54 | CJK674      

#3楼    回复  引用  查看    

恩,确实很诡异,你写的也很诡异
2008-04-01 11:05 | 小瑞克      

#4楼    回复  引用    

同一台机器?
2008-04-01 11:07 | 宝玉xp [未注册用户]

#5楼    回复  引用    

同网段不同电脑/不同网段不同电脑,均偶尔出现该现象,那时我的做法是跨浏览器保存三小时,现在已改为关闭IE即时失效,等待用户反馈中
2008-04-01 11:27 | lt1111 [未注册用户]

#6楼    回复  引用    

关闭IE即时失效 怎么实现的?
2008-04-01 11:45 | wenti [未注册用户]

#7楼    回复  引用    

不要给你的COOKIE设置时效值就行了
2008-04-01 12:50 | lt1111 [未注册用户]

#8楼    回复  引用  查看    

forum认证肯定不会有问题的.
楼主是不是线上布署的web应用程序池设置了超过1个web园.
2008-04-01 13:25 | Michael.li      

#9楼    回复  引用  查看    

或者你单独给此应用程序设置一个应用程序池.
2008-04-01 13:26 | Michael.li      

#10楼    回复  引用    

回9楼
该WEB项目一直是独立的应用程序池
2008-04-01 13:32 | lt1111 [未注册用户]

#11楼    回复  引用    

http://support.microsoft.com/kb/917072
2008-04-01 15:25 | LiJinGuo [未注册用户]

#12楼    回复  引用    

我 都 说 园子里什么鸟都 有 ,11楼正 是 解决 方案 ,在 这里 拜谢 LiJinGuo大大
2008-04-01 15:31 | lt1111 [未注册用户]

#13楼    回复  引用    

让cookies立即过期就可以了,不要设置保留时间
2008-04-01 16:02 | Olive_sunl [未注册用户]

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-24 11:52 编辑过