asp.net – FormsAuthentication:是否安全?

使用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()方法调用,用户名被存储在客户机上。有人可能打破正在使用的加密,并替换存储在另一个的用户名?

我认为我过于偏执,使用的加密类型和级别是足够的,但是以为我会得到一些专家的意见。

解决方法

So what I’ve done in the past is hold the username and password used in a cookie,then re-authentic this with every request.

你不应该使用这种方法。密码不应存储在认证券中。原因是如果认证券遭到入侵,则攻击者具有用户的密码。这种风险可以通过加密身份验证券cookie来缓解,但我认为您是以纯文本形式存储cookie。

My concern is that by using the SetAuthCookie() method call,that the username is being stored on the client machine. Is it then possible for someone to break the encryption being used and substitute the username being stored for another?

正如Shiraz指出的那样,如果您创建一个持久性的cookie,cookie只会保留在客户端计算机上。 (SetAuthCookie的其中一个参数指示是否创建此类Cookie。

即使有人打破了加密方案来修改cookie,以提供不同的用户名,因为身份验证单也被数字签名,这意味着ASP.NET可以检测cookie的内容是否已被修改。要创建数字签名,攻击者将需要知道服务器使用的盐,如果用户可以确定这一点,这意味着他可以访问您的Web服务器的文件系统,所以现在你有更大的问题。

另一件需要了解的是,认证券有一个到期期限,这对票证的有效期有一定的限制。因此,即使有人窃取用户的Cookie,攻击者必须使用该被盗票的时间将根据您为表单身份验证系统指定的超时值(默认为30分钟)而受到限制。

总而言之,官方ASP.NET表单认证系统将比单独开发人员能够实现的安全性更加安全。开发人员应该努力使用表单认证系统,而不是自己的解决方案,包括更好的安全性,不必重新开发轮子,采用标准做法,因此加入团队的其他开发人员没有这么大的学习曲线起来加快速度,等等。

有关表单身份验证系统的详细细节以及票证的安全性如何,各种< form>配置设置工作等,见:Forms Authentication Configuration and Advanced Topics

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...