Nói đơn giản,
captcha là một bức tường để ngăn chặn những gì không phải do con người trực tiếp thao tác trên hệ thống. NukeViet cũng sử dụng Captcha để giải quyết vấn đề đó.
Mình không nhắc lại trong bài viết này, vì nó đã có rất nhiều bài viết giới thiệu về loại này, có thể tìm kiếm trên internet để biết thêm thông tin.
- Cấu hình NukeViet có một phần riêng về captcha, bạn có thể cấu hình captcha cho hệ thống tại
ACP/Cấu hình/Thiết lập an ninh/Cấu hình hiển thi captcha.
- Trong NukeViet, captcha được dùng nhiều ở khu vực đăng nhập (đăng nhập thành viên, đăng nhập quản trị, biểu mẫu liên hệ,.....)
NukeViet có 2 các tạo mã, có thể tùy chọn sử dụng hai loại này ở khu vực
Thiết lập an ninh
- Tạo mã sử dụng thư viện SimpleCaptcha: Xem thêm tại
http://code.google.com/p/cool-php-captcha/
-
(Mặc định) Tạo mã sử dụng thư viện GD (PHP) và các hàm xử lý hình ảnh: Tạo một chuỗi ngẫu nhiên, ghi chuỗi này vào SESSION (để kiểm tra về sau), dùng các font ngẫu nhiên (Chúng ta thấy một lần reload là font chữ thay đổi, loằng ngoằng khác nhau), tạo 1 bức ảnh chứa chuỗi này để hiển thị lên màn hình.
Xin lấy module contact làm ví dụ, từ đó ban có thể tham khảo code để chèn captcha vào dự án của mình.
Các file liên quan:
Mở
themes/default/modules/contact/form.tpl (Hiển thị mã)
<img height="22" src="/index.php?scaptcha=captcha&t={NV_CURRENTTIME}" alt="{LANG.captcha}" class="captchaImg" />
/index.php?scaptcha=captcha&t={NV_CURRENTTIME} đường dẫn này trả về một cái ảnh (là hình ảnh hiển thị mã captcha),
NV_CURRENTTIME là thời gian hiện tại. Tên class
captchaImg được quy định trong hàm
change_captcha (Xem bên dưới).
<em class="fa fa-pointer fa-refresh fa-lg" onclick="change_captcha('#fcode_iavim');"> </em>
change_captcha là hàm javascript, để đổi ảnh captcha (Ảnh nào khó quá nhìn không rõ thì đổi ảnh khác). Hàm này được load cùng giao diện, kiểm tra giao diện của bạn, nếu vẫn chưa có hàm này, cần thêm vào, tham khảo nội dung hàm ở
/themes/default/js/main.js
Cú pháp:
change_captcha( id_input_nhập_captcha )
Cơ chế tạo lại mã của hàm này cũng như cơ chế tạo mã bên trên.
Bạn cần có một input text để nhập mã nhìn thấy vào:
<input type="text" maxlength="6" value="" id="fcode_iavim" name="fcode" class="form-control" />
Mở modules/contact/theme.php (Xử lý giao diện)
Bên dưới dòng code khởi tạo giao diện
$xtpl = new XTemplate( 'form.tpl', NV_ROOTDIR . '/themes/' . $module_info['template'] . '/modules/' . $module_file );
Chỉ cần assign thêm thời gian hiện tại và đường dẫn thư mục là đủ:
$xtpl->assign( 'NV_CURRENTTIME', NV_CURRENTTIME );
$xtpl->assign( 'NV_BASE_SITEURL', NV_BASE_SITEURL );
Các hằng liên quan có thể dùng: NV_GFX_WIDTH (Độ rộng hình), NV_GFX_HEIGHT (Chiều cao hình), ......
Mở modules/contact/funcs/main.php (Xử lý dữ liệu)
Tìm đoạn code
elseif( ! nv_capcha_txt( $fcode ) ){
$error = $lang_module['error_captcha'];}
Hàm
nv_capcha_txt để kiểm tra xem giá trị nhập vào input có đúng với hình ảnh đang hiển thị hay không. True = đúng và False = Sai. Sau đó đưa ra câu thông báo hợp lý.
Xem thêm: Cấu hình hiển thị captcha