我可以使用 FormsAuthentication.SetAuthCookie 作为我的任何用户登录我的应用程序。这是安全风险吗?

I can use FormsAuthentication.SetAuthCookie to log into my app as any of my users. Is this a security risk?

我有一个标准的 MVC 应用程序,我刚刚使用以下方法测试了登录:

 FormsAuthentication.SetAuthCookie("userToImpersonate", false);

这很管用——我可以不用他们的密码登录。这应该是可能的吗?我害怕认为我的开发人员可以用一行代码冒充另一个用户,我更害怕认为我们的 Forms Auth 实现不正确。 FWIW,这是我们通常授权用户的方式:

 WebSecurity.Login(model.Username, model.Password)

如果用户拥有对代码的完全访问权限,那么,是的,他们可以做他们喜欢做的事,包括创建 "backdoor" 页面,让他们以其他用户的身份登录。

可能值得实施同行评审流程,在该流程中,所有更改都经过代码评审并由其他开发人员批准,然后再部署到生产环境中。这些审查可以在被允许进入您的变更管理流程之前由管理层签署。

FormsAuthentication.SetAuthCookie 方法将使用 machine key that is currently being configured. The correct and secure way to handle this is to have proper automation (Ansible, Puppet, ...) that will spin your production machines and set the production keys to some secret values that your developers will never have access to. For example if you use Ansible, then Ansible Vault 加密 cookie 是保存生产密钥的正确位置,只有您的 devops 才能访问它。

这样您的开发人员可以在他们的本地机器上完美地使用 FormsAuthentication.SetAuthCookie 方法,但是生成的 cookie 将使用他们的机器密钥加密,使其在生产中无用。当然,如果攻击者获得了对您的生产机器的访问权限,那么您将无能为力。