【发布时间】:2011-02-08 16:02:25
【问题描述】:
使用 FormsAuthentication 构建到 asp.net 中,可以非常快速和轻松地创建一个为经过身份验证的用户创建 cookie 的登录系统:
FormsAuthentication.SetAuthCookie(uniqueUsername, false);
与 Web.Config 文件中的一些代码配对:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="30" defaultUrl="Dashboard.aspx" protection="All" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
这会将所有请求退回到 Login.aspx,直到用户被批准并使用 SetAuthCookie() 方法调用创建 cookie。
这足够安全吗?
我使用的经验法则是,我不会在客户端上存储他们没有发送给我的任何数据。所以我过去所做的就是将用户名和密码保存在 cookie 中,然后在每次请求时重新验证。
使用这种方法每次都重新进行身份验证会产生额外的开销,但这也意味着我没有在客户端上存储任何服务器数据。
我的担心
我担心的是,通过使用 SetAuthCookie() 方法调用,用户名被存储在客户端计算机上。那么是否有可能有人破解正在使用的加密并将存储的用户名替换为另一个用户名?
我认为我过于偏执,并且使用的加密类型和级别已经足够,但我想我会就该主题获得一些专家意见。
【问题讨论】:
-
我不投票结束,这个问题不直接重复上述url。
-
你为什么有
在 web.config 中? -
@Rushino OP 有
<deny users="?" />以仅作为经过身份验证的用户来保护他的整个站点。使用此配置的 OP 声明不允许对其站点进行公共(匿名)访问。这 ?指任何未经身份验证的用户。 -
如果您使用公共托管站点,您还应该设置您的机器密钥,因为机器密钥是默认用于加密表单身份验证的。如果其他人驻留在您的服务器上,他们将有权访问
标签: asp.net security cookies ssl forms-authentication