代码审计之URL重定向

0x01:介绍

程序中经常会涉及到页面的跳转,也就是当前页面操作完后需要跳到另一个页面。常见的功能例如登录成功后的返回页,或者第三方跳转登录页等等,当需要跳转的页面URL被可控时,则会造成URL重定向问题。URL重定向危害在于可导致正常用户访问恶意网站,访问自己的钓鱼网站,盗取cookie等。

0x02:示例

以下示例简单的演示了URL重定向,示例代码如下。

public class RedirectServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String query = request.getQueryString();

if (query.contains("url")) {
String url = request.getParameter("url");
                response.sendRedirect(url);
            }
    }
}

代码中首先使用request.getQueryString来获取了URL中的参数,例如xxxx.com?a=aa&b=bb,则request.getQueryString获取的就是a=aa&b=bb,随后使用contains方法进行了判断,即参数中是否包含url,如果包含则使用request.getParameter进行获取,最后直接访问该地址。

以上过程并没有涉及到过滤和验证的情况,恶意攻击者修改参数中url的值后发送正常用户诱导点击即可完成攻击。

0x03:防护

常见的防护方法一般分两种情况,一种是跳转地址不确定的,即要跳转的url有很多个,这种修复建议是在与跳转的url中间加一个跳转页,来提示用户。

再一种是跳转地址相对少的,只限于本域的,这种的修复建议是指定白名单策略,跳转前判断url,若非本域则应该禁止。

左边是个人公众号<发哥微课堂>,不定期发表干货,从未间断,欢迎关注。

右边是微信也可以加我交流讨论,朋友圈也会不定期发表相关的内容。

代码审计之URL重定向_第1张图片

你可能感兴趣的:(代码审计)