- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 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,攻击者使用被盗票据的时间也会受到限制,具体取决于 timeout
。您为表单例份验证系统指定的值(默认为 30 分钟)。
总而言之,官方 ASP.NET 表单例份验证系统将比单独的开发人员能够实现的系统安全得多。开发人员应该努力使用表单例份验证系统而不是推出自己的解决方案,原因有很多,包括更好的安全性,不必重新发明轮子,采用标准实践,这样加入团队的其他开发人员就不会有太多的学习曲线以加快速度,等等。
有关表单例份验证系统和票证如何保护的更多细节,各种<forms>
配置设置工作等,参见:Forms Authentication Configuration and Advanced Topics .
关于asp.net - 表单例份验证 : Is it secure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935321/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!