下載recapthca的php資源的方法與申請設recapthca帳號、公鑰、私鑰的方法請自行參閱這篇文章,joomla 1.5後台管理加入recapthca的作法,重複的部份,這裡不再談了!
為joomla 1.5量身訂做的驗證碼驗證套件很多,為何還要辛苦去手動改為recapthca驗證碼,其實最主要還是安全的問題,因為recapthca驗證碼是有專人免費維護更新,所以較沒有必須不斷更新驗證碼的麻煩與被破解的風險。也因此筆者才要做這個更改,再者它也提供無障礙功能!
我們的目標是要在Joomla 1.5裡,在使用者註冊、使用者登入、忘記帳號、忘記密碼等四個頁面裡加入recapthca驗證碼驗證功能。如下圖
要完成這四個目標頁面,主要必須找到Joomla 1.5裡相關檔案,在該檔案中適當的位置加入相關的recapthca驗證碼語法!
其中所謂的相關檔案主要放於下列資料夾裡:
components/com_user/views
進到裡面可以看到如下圖五個資料夾
而要的檔案分別在login、register、remind、reset,四個資料夾裡的各別的tmpl資料夾裡。
再進到tmpl資料夾裡,我們要改的default_login.php就在這裡,而另一個紅色箭頭指的recaptchalib.php這支程式則是要自己複製進來的(參考joomla 1.5後台管理加入recapthca的作法)
接著我來說明如何改default_login.php這個程式:
vim default_login.php
找到約49行的位置,加入(注意細節請參考joomla 1.5後台管理加入recapthca的作法)
<?php
//底下是發哥自己加入的
?>
<div align="center">請於下列欄位中輸入下圖所見之驗證碼</div>
<div align="right"><?php
require_once('recaptchalib.php');
$publickey = "你的公開鑰匙"; // you got this from the signup page
echo recaptcha_get_html($publickey);
?></div>
<?php
//以上是哥發自己加入的
?>
存檔
接著分別更改下列路徑裡的檔案
路徑 | 更改之檔案 | 加於第幾行後 | 加的內容 | 備註 |
register/tmpl | default.php | 75 | <?php //底下是發哥自己加入的 ?> <div align="center">請於下列欄位中輸入下圖所見之驗證碼</div> <div align="right"><?php require_once('recaptchalib.php'); $publickey = "你的公開鑰匙"; // you got this from the signup page echo recaptcha_get_html($publickey); ?></div> <?php //以上是哥發自己加入的 ?> | 此路徑裡亦必須拷備一份recaptchalib.php這支程式 |
remind/tmpl | default.php | 24 | <?php //底下是發哥自己加入的 ?> <div align="center">請於下列欄位中輸入下圖所見之驗證碼</div> <div align="right"><?php require_once('recaptchalib.php'); $publickey = "你的公開鑰匙"; // you got this from the signup page echo recaptcha_get_html($publickey); ?></div> <?php //以上是哥發自己加入的 ?> | 此路徑裡亦必須拷備一份recaptchalib.php這支程式 |
reset/tmpl | default.php | 26 | <?php //底下是發哥自己加入的 ?> <div align="center">請於下列欄位中輸入下圖所見之驗證碼</div> <div align="right"><?php require_once('recaptchalib.php'); $publickey = "你的公開鑰匙"; // you got this from the signup page echo recaptcha_get_html($publickey); ?></div> <?php //以上是哥發自己加入的 ?> | 此路徑裡亦必須拷備一份recaptchalib.php這支程式 |
做完以上設定後就可以在前台裡看到這些畫面了
然而這樣還未完成,還必須去更改一個檔案:
components/com_user/裡的controller.php
打開這支程式
vim controller.php
分別找到
function login()
function register_save()
function requestreset()
function remindusername()
這幾段落,在其中適當的位置分別加上下列這段語法
//
require_once('recaptchalib.php');
$privatekey = "你的私人密鑰";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("你輸入的驗證碼錯誤,請回上一頁再試一次!" .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
}//
以function login()為例,我加完後變成這樣
function login()
{
// Check for request forgeries
JRequest::checkToken('request') or jexit( 'Invalid Token' );global $mainframe;
$useSecurityImagesInLogin = false;
if (file_exists(JPATH_SITE.DS."administrator".DS."components".DS."com_securityimages".DS."config.securityimages.php")) {
include(JPATH_SITE.DS."administrator".DS."components".DS."com_securityimages".DS."config.securityimages.php");
$useSecurityImagesInLogin = $securityImagesInLogin;
}
//
require_once('recaptchalib.php');
$privatekey = "我的私人密鑰";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("你輸入的驗證碼錯誤,請回上一頁再試一次!" .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
}//
if ($return = JRequest::getVar('return', '', 'method', 'base64')) {
$return = base64_decode($return);
if (!JURI::isInternal($return)) {
$return = '';
}
}
其它的幾個段落就比照此方式去加入即可!
分別加入後,最後還要在上傳一份recaptchalib.php這支程式到components/com_user裡,這樣就可以在joomla 1.5的使用者註冊、使用者登入、忘記帳號、忘記密碼等四個頁面裡,正式使用recapthca驗證碼的驗證功能了!現在你的joomla 1.5前台更安全了!
沒有留言:
張貼留言