如何确保OWASP A10内置表单身份验证的安全



如果您使用ASP.NET表单身份验证,您可能熟悉以下URL:

https://Example.com/Banking/login.aspx?ReturnUrl=%2fBanking%2fBalances.aspx

每当您在没有表单身份验证cookie的情况下访问"Balances.aspx"时,都会收到此消息。ASP.NET会将您跳转到登录页,但在查询字符串中提供ReturnUrl,以便它可以将您重定向回。

不幸的是,这引入了一个未经验证的前锋,这违反了OWASP A10。

跨域漏洞

想象一下,如果我制作一封电子邮件并通过垃圾邮件发送出去。。。这封电子邮件看起来就像是来自银行的电子邮件,并且有一个类似的URL:

https://Example.com/Banking/login.aspx?ReturnUrl=https://Example.org/Banking/login.aspx

请注意,我巧妙地将Example.comExample.org进行了切换,您可能没有注意到这一点。如果我很聪明,我甚至可以使用十六进制代码对整个ReturnUrl进行URL编码,这样你就不会看到它的到来。顺便说一句,我有一个Example.org的EV证书,这意味着你不会出现钓鱼错误,甚至会得到一个漂亮的绿色地址栏。不幸的是,你不会在你认为你在的网站上!在我的登录页面版本(看起来和真实的一样)上,我会告诉你你的密码错了,你可以再次输入,瞧,我刚刚得到了你的密码。

同域漏洞

相同的场景。。。我发了一封电子邮件,看起来像是来自你的银行。但是你的银行不允许跨域重定向。尽管如此,我仍然可以使用以下URL进行攻击:

https://Example.com/Banking/login.aspx?ReturnUrl=https://Example.com/Banking/Transfer.aspx?FromAcct=Checking&ToAcct=6273826&ToCountry=Nigeria&Amount=5000.00

上面看起来很糟糕,但请记住,我可以使用URL编码来屏蔽整个内容,所以它看起来就像十六进制垃圾。

当你点击链接时,系统会提示你登录你的网站,然后它会立即向我的尼日利亚账户转账。

在我看来,ASP.NET表单身份验证相当普遍。开发人员如何减轻此漏洞?

如何使用它重定向用户离开登录页面:

FormsAuthentication.RedirectFromLoginPage

框架中似乎已经建立了一些保护措施:

默认情况下,ReturnUrl变量必须引用当前应用程序。如果ReturnUrl引用其他应用程序或其他服务器上的RedirectFromLoginPage方法重定向到DefaultUrl属性中的URL。如果你愿意要允许重定向到当前应用程序之外的页面,必须使用enableCrossAppRedirects属性。

示例代码:

FormsAuthentication.SetAuthCookie(user.UserName, false);
FormsAuthentication.RedirectFromLoginPage(user.UserName, false);

相关内容

  • 没有找到相关文章

最新更新