Web安全相关:开放重定向(Open Redirection)
Posted 编程玩家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web安全相关:开放重定向(Open Redirection)相关的知识,希望对你有一定的参考价值。
简介
场景分析
假设有一个正规网站http://nerddinner.com/,还有一个恶意网站或钓鱼网站http://nerddiner.com/(注意:这里少了个n)。
一天,小白收到了别人发的链接:http://nerddinner.com/Account/LogOn?returnUrl=http://nerddiner.com。
1. 打开链接后进入了登录界面,小白输入了自己的帐号名密码进行登录。
2. 登录成功后重定向到了恶意网站。
3. 恶意网站是一个仿造正规网站的登录页面,并在上面提示用户名或密码错误。
4. 小白按照提示重新输入了帐号密码信息。
5. 恶意网站保存了客户的用户名密码,然后重定向会正规网站。
6. 小白继续平时正常的操作。
防止开放重定向
防止开发重定向只需要判断重定向的链接是本地的链接或者是合法的链接即可。
1. 如果登录链接和站点其他页面都在同一个域名,在ASP.MVC中可以用Url.IsLocalUrl(string url)来判断。
2. 如果登录链接和站点其他页面不在同一个域名,如单点登录,则需要自己去实现判断的逻辑。
核心代码
[HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { //Your logon logic here. FormsAuthentication.SetAuthCookie(model.UserName, false); if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl) //Comment out this code will cause open redirection ) { return Redirect(returnUrl); } return RedirectToAction("Index", "Home"); }
联想到XSS
源码下载
如果大家想尝试开放重定向的效果,可以去下载代码,把判断本链接的语句Url.IsLocalUrl(returnUrl)注释掉,然后在登录页面加上想要跳转到的页面,如http://xxx.com/Account/LogOn?ReturnUrl=http://www.baidu.com。
以上是关于Web安全相关:开放重定向(Open Redirection)的主要内容,如果未能解决你的问题,请参考以下文章
所有路由的 HTTPS 重定向 node.js/express - 安全问题