這是一款算得上是一款Typecho博客必裝的插件了,可以方便的為你的博客添加友情鏈接功能。
本版本的友情鏈接可以支持以下的功能:
1、方便地在側(cè)邊欄添加友情鏈接。
2、支持兩種輸出方式。一種為函數(shù)輸出方式,主要用于側(cè)邊欄的友情鏈接,或者模板開(kāi)發(fā)者設(shè)計(jì)的友情鏈接模板等。另一種方式為HTML標(biāo)簽式輸出,主要方便用戶建立自己的友情鏈接頁(yè)面。
3、支持文字鏈接、圖片鏈接、圖文混合鏈接等。內(nèi)設(shè)這三種默認(rèn)的輸出方式,支持自定議設(shè)定輸出規(guī)則。
4、支持鏈接分類(lèi),方便管理。
5、支持增加自定義字段,方便用戶做一些個(gè)性擴(kuò)展。
使用幫助
插件的安裝:
解壓至插件目錄后,激活即可。
如果已經(jīng)安裝舊版本的本插件,需要禁用后重新激活。
友情鏈接插件主要有兩種調(diào)用方式。
第一種為函數(shù)調(diào)用法。函數(shù)的原型為:
output($pattern=NULL, $links_num=0, $sort=NULL)
其中,$pattern是輸出規(guī)則。輸出規(guī)則是Links插件的一種特殊語(yǔ)法。使用輸出規(guī)則,可以定制出屬于自己的鏈接輸出方式。例如:
<li><a href="{url}" title="{title}" target="_blank">{name}</a></li>
這就是一個(gè)輸出規(guī)則的例子。經(jīng)過(guò)插件解析后,{url}將會(huì)被替換成鏈接地址,{title}將會(huì)被替換鏈連描述,{name}將會(huì)被替換成鏈接名稱(chēng)。
Links插件目前支持的輸出規(guī)則有:
{lid}鏈接在數(shù)據(jù)表中存放的ID<br />
{url}將會(huì)被替換成鏈接地址<br />
{sort}鏈接的分類(lèi)名稱(chēng)<br />
{title}{description}將會(huì)被替換鏈連描述,兩者效果一樣<br />
{name}將會(huì)被替換成鏈接名稱(chēng)<br />
{image}將會(huì)被替換成鏈接圖片<br />
{user}自定義字段
插件自帶三種輸出規(guī)則:顯示文字、顯示圖片及圖文混排。
當(dāng)$pattern值為NULL或SHOW_TEXT時(shí),則規(guī)則為顯示文字。
<li><a href="{url}" title="{title}" target="_blank">{name}</a></li>\n
當(dāng)$pattern值為SHOW_IMG時(shí),則規(guī)則為顯示圖片。
<li><a href="{url}" title="{title}" target="_blank"><img src="{image}" alt="{name}" /></a></li>\n
當(dāng)$pattern值為SHOW_MIX時(shí),則規(guī)則為顯示圖片和文字
<li><a href="{url}" title="{title}" target="_blank"><img src="{image}" alt="{name}" /><span>{name}</span></a></li>\n
$links_num是用于控制鏈接輸出的條數(shù)的。當(dāng)$links_num為缺省值0時(shí),表示不進(jìn)行限制,輸出滿足條件的所有鏈接。
$sort用于指定輸出的鏈接類(lèi)別,以實(shí)現(xiàn)鏈接的分類(lèi)輸出。缺省值NULL表示輸出所有類(lèi)別的鏈接。
第二種輸出為HTML標(biāo)簽調(diào)用法。可以在文章或頁(yè)面中加入HTML標(biāo)簽來(lái)實(shí)現(xiàn)鏈接的調(diào)用。
其調(diào)用原型為:
<links $links_num $sort>$pattern</links>
$links_num
$sort
$pattern
的功能及缺省值與第一種一樣。不過(guò),為了$links_num
和$sort
缺省值的識(shí)別,建議$sort
采用的命名方式為:以字母開(kāi)頭,僅包括字母和數(shù)字。
使用向?qū)В涸趥?cè)邊欄添加友情鏈接
在0.8默認(rèn)主題上,已經(jīng)集成了本插件的調(diào)用接口。因此,不需要任何的修改即可直接使用。如果主題沒(méi)有本插件接口,可按照以下方式進(jìn)行調(diào)用。
最簡(jiǎn)單的調(diào)用方式為:
<?php Links_Plugin::output(); ?>
此時(shí),會(huì)列出所有的鏈接。
如果想調(diào)用的為圖片鏈接,則調(diào)用方式為:
<?php Links_Plugin::output("SHOW_IMG"); ?>
如果是圖文的混合鏈接,則調(diào)用方式為:
<?php Links_Plugin::output("SHOW_MIX"); ?>
如果想限制側(cè)邊欄的鏈接數(shù)量,比如說(shuō)為10個(gè),則可調(diào)用:
<?php Links_Plugin::output("SHOW_TEXT", 10); ?>
圖片鏈接依此類(lèi)推。
如果想列出某個(gè)類(lèi)別的鏈接,則可調(diào)用:
<?php Links_Plugin::output("SHOW_TEXT", 0, "testsort"); ?>
使用向?qū)В航ⅹ?dú)立的友情鏈接頁(yè)面
建立獨(dú)立的友情頁(yè)面,可以直接用類(lèi)似建立側(cè)邊欄的方式,在模板設(shè)計(jì)階段,就設(shè)計(jì)好鏈接模板。也可以在后臺(tái)的頁(yè)面創(chuàng)建進(jìn)行鏈接引用。
最簡(jiǎn)單的引用方式為:<links></links>
如果想調(diào)用的為圖片鏈接,則調(diào)用方式為:
<links>SHOW_IMG</links>
如果是圖文的混合鏈接,則調(diào)用方式為:
<links>SHOW_MIX</links>
如果想限制側(cè)邊欄的鏈接數(shù)量,比如說(shuō)為10個(gè),則可調(diào)用:
<links 10>SHOW_TEXT</links>
圖片鏈接依此類(lèi)推。
如果想列出某個(gè)類(lèi)別的鏈接,則可調(diào)用:
<links 0 testsort></links>
也可以用
<links testsort></links>
不過(guò),后者要求分類(lèi)必須以字母開(kāi)頭。
最后要注意的是:分類(lèi)名只能包含字母及數(shù)字!
插件 Links 越權(quán)漏洞
趁著這幾天學(xué)校剛開(kāi)學(xué)能有稍微有多一點(diǎn)空余時(shí)間,便對(duì)博客的插件進(jìn)行了一次檢查維護(hù)。當(dāng)維護(hù)到友鏈插件 Links 時(shí),留意到一個(gè)比較奇怪的問(wèn)題,在插件目錄下負(fù)責(zé)處理后臺(tái)管理友鏈請(qǐng)求的 Action.php
之中的全部方法沒(méi)有做任何權(quán)限驗(yàn)證,一開(kāi)始我以為 Typecho 本身會(huì)對(duì)這些請(qǐng)求作相應(yīng)認(rèn)證工作,但是經(jīng)過(guò)一些測(cè)試之后證實(shí)這是一個(gè)允許越權(quán)以及表單欺騙的漏洞。
所有 Links 插件版本為 1.1.1 或之前的用戶都可能受到本漏洞影響。
發(fā)現(xiàn) Links 新增友鏈表單項(xiàng)目未做過(guò)濾,可以配合此漏洞實(shí)施跨站攻擊,請(qǐng)受影響用戶立即檢查并修補(bǔ)。
漏洞修補(bǔ)
當(dāng)務(wù)之急是須封堵漏洞入口,亦即是對(duì)友鏈管理操作添加權(quán)限驗(yàn)證。為了配合 Links 插件原生設(shè)定為僅管理員可進(jìn)入友鏈管理頁(yè)面的這一設(shè)置,則現(xiàn)在需要把 Action.php
中的 action()
方法也限制為僅管理員可用。
具體操作很簡(jiǎn)單,只需在 action()
方法內(nèi)的開(kāi)頭位置插入下列代碼即可。
$user = Typecho_Widget::widget('Widget_User');
$user->pass('administrator');
漏洞復(fù)現(xiàn)
我找了一個(gè)博客使用 Typecho 并且安裝了 Links 插件的好友測(cè)試了一下,首先打開(kāi)自己博客后臺(tái)的友鏈管理面板,用開(kāi)發(fā)者工具把編輯鏈接表單 action 屬性中的域名改成好友網(wǎng)站的域名,再點(diǎn)擊提交。

執(zhí)行提交后,雖然會(huì)因?yàn)槲吹卿浂D(zhuǎn)回到對(duì)方的博客后臺(tái)登錄頁(yè)面,但可見(jiàn)頁(yè)面上方仍然出現(xiàn)了操作成功的提示:“鏈接 XXX 已經(jīng)被增加”,證明添加友鏈的操作已經(jīng)繞過(guò)了權(quán)限驗(yàn)證被順利執(zhí)行。
跨站測(cè)試
我們可以先來(lái)做一個(gè)最簡(jiǎn)單的測(cè)試,利用插件新增友鏈表單,添加一個(gè)“鏈接名稱(chēng)”為 <script>alert('test')</script>
的鏈接。在鏈接被添加后即可見(jiàn)頁(yè)面出現(xiàn)對(duì)應(yīng)的彈出對(duì)話框,也就是說(shuō)添加的 JS 代碼被執(zhí)行了。

我接下來(lái)做的幾個(gè)測(cè)試證實(shí),當(dāng)博客管理員訪問(wèn)受攻擊的友鏈管理頁(yè)面,可以在自身不知情的情況下被他人作出獲取客戶端 Cookie、刪除文章、更改博客配置等高危動(dòng)作,具體代碼就不貼出來(lái)了。說(shuō)明插件對(duì)表單提交內(nèi)容的過(guò)濾工作未完善;而且友鏈管理頁(yè)面表單的“鏈接名稱(chēng)”一項(xiàng)對(duì)應(yīng)的數(shù)據(jù)庫(kù)字段數(shù)據(jù)類(lèi)型為 varchar(200)
,此處也給攻擊者留下了很大的發(fā)揮空間。
最后
如果發(fā)現(xiàn)插件友鏈管理頁(yè)面出現(xiàn)不明條目,建議先馬上將其刪除后修改后臺(tái)管理密碼。