我有一个标准的MVC应用程序,我刚刚使用以下方法测试了登录:
MyClass tmp(???)
这有效 - 我可以在不使用密码的情况下登录。这有可能吗?我害怕认为我的开发人员可以用一行代码冒充另一个用户,而且我更害怕认为我们的Forms Auth实现不正确。 FWIW,这是我们通常如何Auth用户:
FormsAuthentication.SetAuthCookie("userToImpersonate", false);
答案 0 :(得分:1)
FormsAuthentication.SetAuthCookie
方法将使用当前正在配置的machine key
加密Cookie。处理此问题的正确和安全方法是使用适当的自动化(Ansible,Puppet,...)来旋转生产计算机并将生产密钥设置为开发人员永远无法访问的某些秘密值。例如,如果您使用Ansible,则Ansible Vault
是保留生产密钥的合适位置,只有您的devops才能访问它。
通过这种方式,您的开发人员可以在其本地计算机上完美地使用FormsAuthentication.SetAuthCookie
方法,但生成的cookie将使用其计算机密钥进行加密,从而使其在生产中无用。当然,如果攻击者获得了对您的生产机器的访问权限,那么您可以做的就不多了。
答案 1 :(得分:0)
如果用户具有对代码的完全访问权限,那么,是的,他们可以做他们喜欢的事情,包括创建"后门"将其作为其他用户登录的页面。
可能值得实施同行评审流程,其中所有更改都会在部署到生产环境之前由其他开发人员进行代码审核和批准。管理层可以在允许进入您的变更管理流程之前签署这些审核。