這是一款算得上是一款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標簽調用法??梢栽谖恼禄蝽撁嬷屑尤際TML標簽來實現鏈接的調用。
其調用原型為:
<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 屬性中的域名改成好友網站的域名,再點擊提交。

執行提交后,雖然會因為未登錄而跳轉回到對方的博客后臺登錄頁面,但可見頁面上方仍然出現了操作成功的提示:“鏈接 XXX 已經被增加”,證明添加友鏈的操作已經繞過了權限驗證被順利執行。
跨站測試
我們可以先來做一個最簡單的測試,利用插件新增友鏈表單,添加一個“鏈接名稱”為 <script>alert('test')</script>
的鏈接。在鏈接被添加后即可見頁面出現對應的彈出對話框,也就是說添加的 JS 代碼被執行了。

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