老實說,這應該是不被允許的行為 ... 還是分享一下。
我現在改的這個版本是 vbulletin 2.2.2,因為版本老舊加上不會再花錢升級,所以只好用「手動」的方式來新增驗證碼的功能。
今天研究一下 vbulletin 的架構,它把每一頁的 HTML 都存在資料庫裡的 template table 裡面,這時才瞭解原來 vbulletin 如果被 hack 改掉首頁的話,就是因為資料庫被改掉了,難怪復原的方式就只要把資料庫再倒回去就好了。
要在註冊頁面產生驗證碼的話,首先一定要有一個產生亂數圖型的程式,程式碼如下,將它全部複製起來另外存成一個名叫 show_vaildcode.php ,同時上傳到 vbulletin 的目錄下。
<?php
session_start();
if($act == "init")
{
Header("Content-type: image/png");
srand(microtime() * 100000);
$login_check_number = strval(rand("11111","99999"));
session_register("login_check_number");
$h_img = imagecreate(48,17);
$c_black = ImageColorAllocate($h_img, 0,0,0);
$c_white = ImageColorAllocate($h_img, 255,255,255);
imageline($h_img, 1, 1, 350, 25, $c_black);
imagearc($h_img, 200, 15, 20, 20, 35, 190, $c_white);
imagestring($h_img, 5, 2, 1, $login_check_number, $c_white);
ImagePng($h_img);
ImageDestroy($h_img);
die();
}
?>
接下來我們要來去修改一下資料庫裡面的 template table。
可以直接用 phpMyAdmin 下 SQL 指令來修改
SQL 指令1 :
update template
set template = '請確定您已完成了所有要求的表單. 這些包括用戶名, 密碼, E-mail 和驗證碼. 請按返回鍵, 更改錯誤後再重試一次.'
where title = 'error_fieldmissing'
SQL 指令2 :
INSERT INTO `template` (
`templateid` ,
`templatesetid` ,
`title` ,
`template`
)
VALUES (
NULL , '-1', 'error_vaildcodemismatch', '您的驗證碼不符合. 請按上一頁,修正您的錯誤.'
);
第三個 SQL 太長,找到 template table 欄位 title 為 registeradult 的資料後,再去編輯 template 欄位,找到
<tr>
<td bgcolor="{secondaltcolor}"><normalfont><b>請再確認一次 E-mail:</b></normalfont></td>
<td bgcolor="{secondaltcolor}"><normalfont><input type="text" class="bginput" name="emailconfirm" size="25" maxlength="50"></normalfont></td>
</tr>
在後面加上
<tr>
<td bgcolor="{firstaltcolor}"><normalfont><b>請輸入驗證碼:</b></normalfont></td>
<td bgcolor="{firstaltcolor}"><normalfont><input type="text" class="bginput" name="vaildcode" size="25" maxlength="5"></normalfont></td>
</tr>
<tr>
<td bgcolor="{firstaltcolor}"></td>
<td bgcolor="{firstaltcolor}"><img src=show_vaildcode.php?act=init></td>
</tr>
最後按下儲存即可 ~ 資料庫的部份就到此結束。
接下來編輯 register.php 這個檔案,要編輯二個地方。找到
if ($email!=$emailconfirm) {
eval("standarderror(\"".gettemplate("error_emailmismatch")."\");");
exit;
}
在後面加上
if ($vaildcode!=$login_check_number) {
eval("standarderror(\"".gettemplate("error_vaildcodemismatch")."\");");
exit;
}
然後再找到
if ($username=="" or $email=="" or $emailconfirm=="" or $password=="" or $passwordconfirm=="") {
把它改成
if ($username=="" or $email=="" or $emailconfirm=="" or $password=="" or $passwordconfirm=="" or $vaildcode=="") {
存檔離開後,把 register.php 上傳到原本的地方覆蓋過去。
大功告成!
我現在改的這個版本是 vbulletin 2.2.2,因為版本老舊加上不會再花錢升級,所以只好用「手動」的方式來新增驗證碼的功能。
今天研究一下 vbulletin 的架構,它把每一頁的 HTML 都存在資料庫裡的 template table 裡面,這時才瞭解原來 vbulletin 如果被 hack 改掉首頁的話,就是因為資料庫被改掉了,難怪復原的方式就只要把資料庫再倒回去就好了。
要在註冊頁面產生驗證碼的話,首先一定要有一個產生亂數圖型的程式,程式碼如下,將它全部複製起來另外存成一個名叫 show_vaildcode.php ,同時上傳到 vbulletin 的目錄下。
<?php
session_start();
if($act == "init")
{
Header("Content-type: image/png");
srand(microtime() * 100000);
$login_check_number = strval(rand("11111","99999"));
session_register("login_check_number");
$h_img = imagecreate(48,17);
$c_black = ImageColorAllocate($h_img, 0,0,0);
$c_white = ImageColorAllocate($h_img, 255,255,255);
imageline($h_img, 1, 1, 350, 25, $c_black);
imagearc($h_img, 200, 15, 20, 20, 35, 190, $c_white);
imagestring($h_img, 5, 2, 1, $login_check_number, $c_white);
ImagePng($h_img);
ImageDestroy($h_img);
die();
}
?>
接下來我們要來去修改一下資料庫裡面的 template table。
可以直接用 phpMyAdmin 下 SQL 指令來修改
SQL 指令1 :
update template
set template = '請確定您已完成了所有要求的表單. 這些包括用戶名, 密碼, E-mail 和驗證碼. 請按返回鍵, 更改錯誤後再重試一次.'
where title = 'error_fieldmissing'
SQL 指令2 :
INSERT INTO `template` (
`templateid` ,
`templatesetid` ,
`title` ,
`template`
)
VALUES (
NULL , '-1', 'error_vaildcodemismatch', '您的驗證碼不符合. 請按上一頁,修正您的錯誤.'
);
第三個 SQL 太長,找到 template table 欄位 title 為 registeradult 的資料後,再去編輯 template 欄位,找到
<tr>
<td bgcolor="{secondaltcolor}"><normalfont><b>請再確認一次 E-mail:</b></normalfont></td>
<td bgcolor="{secondaltcolor}"><normalfont><input type="text" class="bginput" name="emailconfirm" size="25" maxlength="50"></normalfont></td>
</tr>
在後面加上
<tr>
<td bgcolor="{firstaltcolor}"><normalfont><b>請輸入驗證碼:</b></normalfont></td>
<td bgcolor="{firstaltcolor}"><normalfont><input type="text" class="bginput" name="vaildcode" size="25" maxlength="5"></normalfont></td>
</tr>
<tr>
<td bgcolor="{firstaltcolor}"></td>
<td bgcolor="{firstaltcolor}"><img src=show_vaildcode.php?act=init></td>
</tr>
最後按下儲存即可 ~ 資料庫的部份就到此結束。
接下來編輯 register.php 這個檔案,要編輯二個地方。找到
if ($email!=$emailconfirm) {
eval("standarderror(\"".gettemplate("error_emailmismatch")."\");");
exit;
}
在後面加上
if ($vaildcode!=$login_check_number) {
eval("standarderror(\"".gettemplate("error_vaildcodemismatch")."\");");
exit;
}
然後再找到
if ($username=="" or $email=="" or $emailconfirm=="" or $password=="" or $passwordconfirm=="") {
把它改成
if ($username=="" or $email=="" or $emailconfirm=="" or $password=="" or $passwordconfirm=="" or $vaildcode=="") {
存檔離開後,把 register.php 上傳到原本的地方覆蓋過去。
大功告成!
全站熱搜
留言列表