Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 授予从一个网站到另一个网站的安全访问权限_Asp.net_Security - Fatal编程技术网

Asp.net 授予从一个网站到另一个网站的安全访问权限

Asp.net 授予从一个网站到另一个网站的安全访问权限,asp.net,security,Asp.net,Security,我真的只是想看看从安全角度来看下面的建议有多愚蠢 我有两个网站。一个是管理门户,另一个是成员门户 在管理门户中,管理员可以检索成员列表,我需要为管理员提供登录到成员门户的功能,而无需输入成员登录凭据 这两个网站都是IIS中的独立网站,在本讨论中,让我们假设它们位于不同的服务器上 两个网站访问相同的SQL Server数据库 我在想,我可以在管理员点击“作为成员登录”链接时创建一个随机代码字符串,并将其与成员编号一起保存到数据库中 然后,我可以将代码和成员编号作为查询字符串参数传递给成员门户 然后

我真的只是想看看从安全角度来看下面的建议有多愚蠢

我有两个网站。一个是管理门户,另一个是成员门户

在管理门户中,管理员可以检索成员列表,我需要为管理员提供登录到成员门户的功能,而无需输入成员登录凭据

这两个网站都是IIS中的独立网站,在本讨论中,让我们假设它们位于不同的服务器上

两个网站访问相同的SQL Server数据库

我在想,我可以在管理员点击“作为成员登录”链接时创建一个随机代码字符串,并将其与成员编号一起保存到数据库中

然后,我可以将代码和成员编号作为查询字符串参数传递给成员门户

然后,成员门户读入这些值并在数据库中检查它们,以验证代码字符串是否存在,以及是否与正在传递的成员编号匹配。然后,我可以登录该成员并在数据库中设置一个标志,以将代码设置为正在使用,从而对将来的请求无效

我认为要绕过这一点,黑客需要成功地猜测随机代码,并将其与相应的成员编号一起传递到页面,以便该代码和该组合在数据库中标记为未使用

这似乎不太可能,因为在生成代码和使用代码之间只需要几秒钟

如有必要,我可以随时检查请求的IP地址,因为管理门户的用户都共享相同的固定IP地址


因此,您认为上述内容经得起安全审查的审查,还是我需要走SSO路线?

假设管理员使用HTTPS以及适当的物理和IT安全流程和程序,这种方法应该足够了。它比大多数金融网站密码重置更安全,通常只需要一个泄露的电子邮件帐户和一些个人信息来重置密码。如果您也检查原始客户端请求的IP地址范围,黑客就必须已经能够访问您的系统或网络。此外,如果您将代码设为GUID,那么(从实用角度讲)不可能有人猜到

您可以添加一层对黑客尝试的检查,方法是每次发生此事件时(或者至少每次都因密钥错误而失败),在数据库中存储一条记录,每次都运行一次检查,看看是否发生得太频繁(比如在过去一小时内发生了100次,或者其他什么——正确的数字取决于您预期的发生频率). 如果这种情况发生得太频繁,请让it部门向it人员发送警报并进行恢复,以便用户必须手动输入其凭据


免责声明:我无论如何都不是安全专家,所以我很乐意听从任何人的要求。我在这里权衡是因为没有答案。

假设使用HTTPS,并且管理员有足够的物理和IT安全流程和程序,这种方法应该足够了。它比大多数金融网站密码重置更安全,通常只需要一个泄露的电子邮件帐户和一些个人信息来重置密码。如果您也检查原始客户端请求的IP地址范围,黑客就必须已经能够访问您的系统或网络。此外,如果您将代码设为GUID,那么(从实用角度讲)不可能有人猜到

您可以添加一层对黑客尝试的检查,方法是每次发生此事件时(或者至少每次都因密钥错误而失败),在数据库中存储一条记录,每次都运行一次检查,看看是否发生得太频繁(比如在过去一小时内发生了100次,或者其他什么——正确的数字取决于您预期的发生频率). 如果这种情况发生得太频繁,请让it部门向it人员发送警报并进行恢复,以便用户必须手动输入其凭据


免责声明:我无论如何都不是安全专家,所以我很乐意听从任何人的要求。由于缺乏答案,我在这里进行权衡。

你的方法非常可靠。我可以确认,因为我正是出于这样的原因实施了这样一个解决方案。我们分析了期权和风险敞口。在实现之后,我们的应用程序通过了一个

原因:

  • SSL是必不可少的防止嗅探。本质的如果没有加密,嗅探器可能会检测到您的GUID,并且可能有一个窗口来使用它)

  • 正如Tony指出的,GUID实际上是不可用的

  • Guid令牌到期应在24小时内到期
建议:

  • 检查IP是好的。但不要被它骗到一种安全感。任何人都可以在标题中伪造IP。通过使用来防止XSSCSRF
AntiForgery令牌是一个cookie,它用\uu RequestVerificationToken填充您的HttpHeader,这几乎和您的GUID一样难以猜测

  • 考虑使用已建立的身份验证框架,如和多租户
一个已建立的框架承担了加密密码的负担。MS框架,如简单成员资格身份集成到现代ASP.NET框架中,为您提供了非常强大的功能基础

如果您使用的是传统的ASP或.NET2.0之类的旧框架,则更适合使用

如果您正在使用Enti创建新的MVC 5应用程序