Links - Typecho友情链接插件

一款Typecho友情链接插件

这是一款算得上是一款Typecho博客必装的插件了,可以方便的为你的博客添加友情链接功能。

本版本的友情链接可以支持以下的功能:
1、方便地在侧边栏添加友情链接。
2、支持两种输出方式。一种为函数输出方式,主要用于侧边栏的友情链接,或者模板开发者设计的友情链接模板等。另一种方式为HTML标签式输出,主要方便用户建立自己的友情链接页面。
3、支持文字链接、图片链接、图文混合链接等。内设这三种默认的输出方式,支持自定议设定输出规则。
4、支持链接分类,方便管理。
5、支持增加自定义字段,方便用户做一些个性扩展。

使用帮助
插件的安装:
解压至插件目录后,激活即可。
如果已经安装旧版本的本插件,需要禁用后重新激活。

友情链接插件主要有两种调用方式。
第一种为函数调用法。函数的原型为:

output($pattern=NULL, $links_num=0, $sort=NULL)

其中,$pattern是输出规则。输出规则是Links插件的一种特殊语法。使用输出规则,可以定制出属于自己的链接输出方式。例如:

<li><a href="{url}" title="{title}" target="_blank">{name}</a></li>

这就是一个输出规则的例子。经过插件解析后,{url}将会被替换成链接地址,{title}将会被替换链连描述,{name}将会被替换成链接名称。
Links插件目前支持的输出规则有:

{lid}链接在数据表中存放的ID<br />
{url}将会被替换成链接地址<br />
{sort}链接的分类名称<br />
{title}{description}将会被替换链连描述,两者效果一样<br />
{name}将会被替换成链接名称<br />
{image}将会被替换成链接图片<br />
{user}自定义字段

插件自带三种输出规则:显示文字、显示图片及图文混排。
当$pattern值为NULL或SHOW_TEXT时,则规则为显示文字。

<li><a href="{url}" title="{title}" target="_blank">{name}</a></li>\n

当$pattern值为SHOW_IMG时,则规则为显示图片。

<li><a href="{url}" title="{title}" target="_blank"><img src="{image}" alt="{name}" /></a></li>\n

当$pattern值为SHOW_MIX时,则规则为显示图片和文字

<li><a href="{url}" title="{title}" target="_blank"><img src="{image}" alt="{name}" /><span>{name}</span></a></li>\n

$links_num是用于控制链接输出的条数的。当$links_num为缺省值0时,表示不进行限制,输出满足条件的所有链接。

$sort用于指定输出的链接类别,以实现链接的分类输出。缺省值NULL表示输出所有类别的链接。

第二种输出为HTML标签调用法。可以在文章或页面中加入HTML标签来实现链接的调用。
其调用原型为:

<links $links_num $sort>$pattern</links>


$links_num $sort $pattern的功能及缺省值与第一种一样。不过,为了$links_num$sort缺省值的识别,建议$sort采用的命名方式为:以字母开头,仅包括字母和数字。

使用向导:在侧边栏添加友情链接

在0.8默认主题上,已经集成了本插件的调用接口。因此,不需要任何的修改即可直接使用。如果主题没有本插件接口,可按照以下方式进行调用。
最简单的调用方式为:

<?php Links_Plugin::output(); ?>

此时,会列出所有的链接。
如果想调用的为图片链接,则调用方式为:

<?php Links_Plugin::output("SHOW_IMG"); ?>

如果是图文的混合链接,则调用方式为:

<?php Links_Plugin::output("SHOW_MIX"); ?>

如果想限制侧边栏的链接数量,比如说为10个,则可调用:

<?php Links_Plugin::output("SHOW_TEXT", 10); ?>

图片链接依此类推。

如果想列出某个类别的链接,则可调用:

<?php Links_Plugin::output("SHOW_TEXT", 0, "testsort"); ?>

使用向导:建立独立的友情链接页面
建立独立的友情页面,可以直接用类似建立侧边栏的方式,在模板设计阶段,就设计好链接模板。也可以在后台的页面创建进行链接引用。

最简单的引用方式为:
<links></links>
如果想调用的为图片链接,则调用方式为:

<links>SHOW_IMG</links>

如果是图文的混合链接,则调用方式为:

<links>SHOW_MIX</links>

如果想限制侧边栏的链接数量,比如说为10个,则可调用:

<links 10>SHOW_TEXT</links>

图片链接依此类推。
如果想列出某个类别的链接,则可调用:

<links 0 testsort></links>

也可以用

<links testsort></links>

不过,后者要求分类必须以字母开头。

最后要注意的是:分类名只能包含字母及数字!

插件 Links 越权漏洞

趁着这几天学校刚开学能有稍微有多一点空余时间,便对博客的插件进行了一次检查维护。当维护到友链插件 Links 时,留意到一个比较奇怪的问题,在插件目录下负责处理后台管理友链请求的 Action.php 之中的全部方法没有做任何权限验证,一开始我以为 Typecho 本身会对这些请求作相应认证工作,但是经过一些测试之后证实这是一个允许越权以及表单欺骗的漏洞。

所有 Links 插件版本为 1.1.1 或之前的用户都可能受到本漏洞影响。

发现 Links 新增友链表单项目未做过滤,可以配合此漏洞实施跨站攻击,请受影响用户立即检查并修补。

漏洞修补

当务之急是须封堵漏洞入口,亦即是对友链管理操作添加权限验证。为了配合 Links 插件原生设定为仅管理员可进入友链管理页面的这一设置,则现在需要把 Action.php 中的 action() 方法也限制为仅管理员可用。

具体操作很简单,只需在 action() 方法内的开头位置插入下列代码即可。

$user = Typecho_Widget::widget('Widget_User');
$user->pass('administrator');

漏洞复现

我找了一个博客使用 Typecho 并且安装了 Links 插件的好友测试了一下,首先打开自己博客后台的友链管理面板,用开发者工具把编辑链接表单 action 属性中的域名改成好友网站的域名,再点击提交。

Links - Typecho友情链接插件-Npcink

执行提交后,虽然会因为未登录而跳转回到对方的博客后台登录页面,但可见页面上方仍然出现了操作成功的提示:“链接 XXX 已经被增加”,证明添加友链的操作已经绕过了权限验证被顺利执行。

跨站测试

我们可以先来做一个最简单的测试,利用插件新增友链表单,添加一个“链接名称”为 <script>alert('test')</script>的链接。在链接被添加后即可见页面出现对应的弹出对话框,也就是说添加的 JS 代码被执行了。

Links - Typecho友情链接插件-Npcink

我接下来做的几个测试证实,当博客管理员访问受攻击的友链管理页面,可以在自身不知情的情况下被他人作出获取客户端 Cookie、删除文章、更改博客配置等高危动作,具体代码就不贴出来了。说明插件对表单提交内容的过滤工作未完善;而且友链管理页面表单的“链接名称”一项对应的数据库字段数据类型为 varchar(200),此处也给攻击者留下了很大的发挥空间。

最后

如果发现插件友链管理页面出现不明条目,建议先马上将其删除后修改后台管理密码。

下载权限

查看
  • 免费下载
    评论后下载
    登录后下载

  • {{attr.name}}:
您当前的等级为
您有每天免费下载所有资源次的特权,今日剩余 已取得下载权限
最后修改: 2020-03-31 04:27
Typecho

Handsome - 一如少年般模样Typecho主题

2020-2-16 0:26:00

Typecho

Soso - 搜索增强Typecho插件

2020-2-17 7:14:20

⚠️
Npcink上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 link@baimu.org 或点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索