0

我知道这个问题已经被问过无数次了,但相信我,我已经在谷歌上搜索了几个小时,但一无所获。无论外面有什么,它都是用于 MVC 的,我没有使用它。

我的要求很简单。我不想使用 asp.net 中提供的默认身份验证。我会将用户名/密码/角色存储在我的自定义 SQL Server 表中。我将为用户名/密码和一个验证按钮提供 2 个输入。验证后,他可以访问管理区域。这只会被我的子域“admin. * . com”中的管理员使用。他们将使用此页面每天向网站添加内容。

  1. 我该如何实现它。一个教程链接就足够了。
  2. 生产安全吗?我不希望一些新手黑客进入我的网站并将其搞砸。如果不安全,我还有什么选择。

谢谢,开发

4

4 回答 4

1

根据我们的评论,鉴于您不愿意实施ASP.Net 成员资格 提供程序(值得花时间进行调查 - 您现在可能不觉得它是现在,但它可能很方便。我一开始也有同样的感觉,但是维护自己的代码和基础设施的成本很快被证明是虚假的经济)你至少有两个其他选择:

1) 简单的表单认证

将所有管理页面放在一个文件夹下,例如 /Admin,然后使用表单身份验证来保护对该文件夹的访问。只有在数据库Web.Config中定义的用户才能访问这些页面。这不如 ASP.Net 成员资格灵活,但可以为您提供您想要的大部分内容。在安全性方面,这将与您的网站一样安全,经过良好测试并且有据可查。

2) 使用 Facebook OAuth

您提到您的用户可以访问 Facebook。您可以使用Facebook为您进行身份验证。尽管您无法获取用户名和密码,但您可以取回一个令牌,然后您可以针对已知的权限集进行验证。不过,这比 1) 要做的工作要多得多,并且会将您与 Facebook API 未来可能发生的变化联系起来。但是,它也受益于经过良好测试和安全,但您几乎无法控制实际的用户信息。

顺便说一句,还请考虑对 Google 好一点!

于 2012-06-19T08:38:59.537 回答
1

您可以创建自己的自定义会员提供商,它具有您正在寻找的功能。asp.net 会员提供商

出于安全目的,最好使用久经考验的方法。请记住,您可以自定义任何提供者,包括角色提供者,甚至可以创建自己的独特提供者。

于 2012-06-19T08:07:57.463 回答
1

这是一个如何使用 ASP.NET 1.1 进行 LDAP 身份验证的示例。该逻辑可能仍然适用,或者可以适应更高版本的 ASP.NET,尽管我还没有测试过。

使用内置的会员提供程序,或实施您自己的,并不能保证黑客无法访问您的系统。你必须考虑的事情:

  1. 在客户端和服务器之间加密数据
  2. 不要将密码存储在数据库中,甚至不加密。如果可以的话,对每个密码进行哈希处理。
  3. 强制执行强密码熵
  4. 确保会话和授权 cookie 标记为 HttpOnly 和 Secure
  5. 对于管理员密码,有一个经常更改它们的策略(比如每月一次)
  6. 提供在有人登录其帐户时通知管理员的方法
  7. 暂时锁定超过每秒请求数且认证失败的ip地址
  8. 当用户在 y 分钟(例如 10)内输入密码超过 x(例如 10)次时,临时锁定用户。

这些只是一小部分要寻找的东西。您还必须担心会话劫持、javascript 攻击等。

这不是一件小事。

于 2012-06-19T08:36:46.540 回答
0

编写自定义身份验证处理程序非常危险。有很多方法可以让它出错并使您的网站容易受到攻击。

我也理解您对表单身份验证非常复杂的抱怨。我面临着类似的十字路口,并决定建立自己的身份验证系统FSCAuth。它是 BSD 许可的。它的设计非常简单,并且允许您可以成像的几乎任何数据库格式。设置它所要做的就是在您的数据库中实现一个小的 4 函数接口并填充一些配置字段。

于 2012-07-03T20:39:18.413 回答