NO SPAM WP No External Links插件可以帮助我们管理网站上的外部链接,将站外链接变成站内链接,防止权重流失,但该插件使用了Open Redirect(自由重定向)的技术,存在潜在的安全隐患,且听Sola慢慢道来。

 

WP No External Links的安全问题

本站一直在使用WP No External Links插件管理外部链接,他的好处是管理界面简单、自动化,如同傻瓜照相机,其同类插件要么功能太多,要么设置界面让人眼花缭乱,心理疲劳,曾经撰文《支持WordPress站内链接跳转到外部链接的插件介绍》描述这个问题。

这个插件的优势在于:

  • 将站外连接变为http://yourdomain.com/goto/[站外链接URL]的形式,防止权重流失
  • 为站外链接添加nofollow属性,并且在新窗口中打开
  • 记录站外链接点击日志,可以设置保存时间
  • 以上三项都是可选的

很符合需求的一款插件,唯一的问题就出在第一个优点,链接重定向中使用Open Redirect,并且没有任何安全检查,意味着一些非法网站可以利用你的地址将用户重定向到自己的网站,久而久之可能造成被利用的网站遭到惩罚。而且,及时设置不重写外部链接地址,重定向功能依然工作。

Open Redirect Attack

google对Open Redirect技术存在的问题有详细的描述。如果你的网站具备Open Redirect功能且没有任何防御措施,任何人都可以利用该网站固定的重定向地址将一个非法网站伪造成你的网站,毫不知情的用户通过这些链接访问了病毒网站或者钓鱼网站,将你的网站举报给google,那就得不偿失了。

为了防止该问题发生,可以在重定向前检测一下referer是否是自己的网站,或者查询数据库看该链接是否存在于自己的网站,当然第二种方法资源消耗过大。这些方法不一定总是有用的,但总比没有强。

替代品

其实给外链加上nofollow就够了,不必追求链接的统一性(开始发扬阿Q精神)。还有一些不错的插件可以为外链添加nofollow和新窗口打开的属性,比如WP External Links,功能包括:

  • 新窗口打开外部链接
  • 外部链接添加nofollow和external属性
  • 为外部链接添加图标

还有些别的小功能,不过我看中的就这三个,装上就能初步管理外部链接,可惜没有日志功能,但也够用了。

 

11条留言

  1. 我看中 WP No External Links,是因为它可以把外链变成 http://xxx.com/goto/123/ 这种形式,据作者称这个会拖慢blog及可能不够安全,不知道会能不能改进?

    1. 没觉得拖慢blog很多,但不够安全是真的,所以我改了插件,跳转之前检查referer地址,如果不是从我的博客点击这种链接,会出现404错误。之前就注意到后台外链点击记录里出现了我博客上根本没有的外部链接。
      当然这样做也有坏处,如果文章转载到别的地方,点了也会出404,用户体验不好。
      要想鱼和熊掌兼得,只能在跳转的时候查询数据库,看这个链接是不是真的存在于自己的网站,但这样肯定要拖慢blog很多了。

      1. 我刚才看了源码,如果采用http://xxx.com/goto/123/这种形式,它会把每个链接都保存在wp_masklinks这个表里,跳转时 就会查询相应url的ID,用ID作为url数字。如果是采集站,可能会有大量的外链接,这样子的查询我想确实会慢。但是安全上 我觉得还是可以的,数字形式的url 不支持http://www.solagirl.net/goto/http://anywhere这种链接的。

        1. 刚才说错了,并不是数字形式的url不支持Open Redirect,而是 如果选择 Do not use 302 redirect, only javascript redirect 这个后,就不支持 Open Redirect 了,这样子是不是安全性好一些?

          1. 只有启用Mask url with special numeric code这一项,才能禁用Open Redirect,因为有了这一项就必须查询数据库,不过刚才试了一下,如果随便写数字,会出现infinite redirect的现象,查询数据库的方式肯定对服务器压力大一点。
            如果不开启Mask url with special numeric code,启用Do not use 302 redirect,也可以重定向到任何网站,重定向的时候会显示一个页面告诉你正在离开此网站,我想这个还是好一点的,至少能让用户意识到他们要去另一个网站了。
            我试验的结果是这样,你试试,要是有啥新发现告诉我哦。

          2. 我刚才试了一下,FF下,不管设置什么,都没法禁用 open redirect。IE 下倒是可以有效。

          3. 这倒是很奇怪啊,这东西还有跨浏览器兼容性问题?我只知道Firefox的预读取功能经常给wp找麻烦,别的原因想不到了。

  2. sola, 你好:
    “如果你的网站具备Open Redirect功能且没有任何防御措施,任何人都可以利用该网站固定的重定向地址将一个非法网站伪造成你的网站,” 这句话怎么理解,如果我外链指向的是大站,象网易等等,不是个人小站的话,其它人怎么去伪装呢?
    顺便,上面那种都是垃圾评论,不要理它。

    1. 伪造的前提是你的网站具有open redirect功能,比如我的有,所以别人只要输入http://www.solagirl.net/goto/http://anywhere,就能跳转到【anywhere】这个地址,但普通用户看的域名是solagirl.net,就会以为这个地址是我网站的地址,有一定的迷惑性。
      跳转到有名的网站当然没事,就怕跳转到病毒网站。

  3. 赚钱很简单,要赚大钱就难了。。。

评论功能已关闭