我使用c#& amp;创建了一个网络身份验证应用asp.net并想要反弹你认为它的安全性。所有导航均由https完成。
用户注册
重设密码
登录(使用验证控件和文本框限制来限制输入)
有点罗嗦,但想要清楚。
我在这里遗漏了什么?我想使用MS的表单auth,但决定自己滚动,因为我有一些问题,我想用FBA完成一些自定义的东西。通过使用会话变量作为步骤完成标记,这是否足以防止会话窃取或书签?有更好的方法吗?
请问?
答案 0 :(得分:6)
ASP.NET Forms身份验证或使用Membership Provider位的哪些方面不符合您的需求?我发现在很多不同的场景中都非常灵活?
滚动自己通常会在未来使生活变得艰难,特别是当您需要开始进行更改时。您还可以使用母版页来验证用户登录状态等,但是当您需要更多母版页时,您需要在每个母版页中复制相同的代码块并使其保持一致。这可能会成为未来某个地方的维护噩梦。
如果您没有在框架中使用现成的烘焙认证工具,那么您应该在其他地方管理这种事情,例如在HttpModule中。
我认为你应该重温你正在做的事情。如果需要从用户对象挂起用户特定数据/对象,请查看实现自己的自定义IIdentity
对象。然后分配给自定义IPrincipal
,您可以将其附加到ASP.NET中的Context.User
。
@ asp316和@Jack(评论)我建议抓住这两本书:
Developing More-Secure Microsoft® ASP.NET 2.0 ApplicationsDominick Baier Stefan Schackow的
Professional ASP.NET 2.0 Security, Membership, and Role Management
您会惊讶于.NET内置的安全基础架构的灵活性。除了在web.config中添加<authentication mode="Forms">
设置并在页面上打一个<asp:login runat="server"/>
控件之外,还有很多其他功能。
答案 1 :(得分:6)
关于“滚动你自己”的事情是,很容易以微妙的方式弄错它,使出现工作。然后,当然,您可以部署此代码并继续处理其他事情,而不知道出现任何问题。毕竟,它通过了所有测试。
一年之后,事实证明你的网站在六个月前被黑了,直到那时你才知道它。
更好地找到依赖安全专家编写的实现的方法。
答案 2 :(得分:2)
我觉得你很好;在一定程度的错误登录尝试(5次不良尝试后1小时?)之后我还会锁定用户一段时间并检查请求之间的时间(根据我的经验,AjaxControlToolkit“nobot”在这里工作奇迹)。 p>
一个选项,而不是使用您的主页面作为安全代码,是实现页面(或主页面)可以继承的接口;这样,如果您扩展到多个母版页,或者如果您有母版之外的页面,则可以继续使用相同的安全检查代码。
根据您的要求,我会回避(必需的)安全问题;我总是忘记我的。您已经在检查SSN,BDay,姓氏,用户名和密码;任何知道这一切的人都可以猜到你母亲的娘家姓名。
[编辑]
另外,我做认为只要你像疯了一样审查它就可以自己滚动。扔掉其他人,看看它是如何保持的。我完全理解ASP.NET控件选项的不灵活性;他们的控件可能更安全(尽管,你永远不应该盲目相信任何东西,特别是那些你不知道魔法黑盒后面发生了什么的东西),但有时候你只需滚动你的当它不够灵活时拥有。