Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Programming » PHP » PHP Script tạo captcha bảo mật cho website

PHP Script tạo captcha bảo mật cho website

Thứ Tư, 15/10/2014 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Trong bài viết này mình sẽ hướng dẫn các bạn cách tạo captcha trong PHP sử dụng thư viện simple-php-captcha.
Tải thư viện tạo captcha dễ dàng với PHP của claviska tại đây.

Kiểm tra hỗ trợ PHP GD2

Thư viên yêu cầu có hỗ trợ PHP GD2. Đảm bảo thư viện này có cài đặt trên web server. Bằng cách tạo file kiểm tra test.php và up lên thư mục gốc của website.

<?php phpinfo(); ?>

Truy cập test.php trên trình duyệt. ie: http://www.yoursite.com/test.php
Hàm trên sẽ hiển thị toàn bộ thông tin cài đặt PHP trên web server của bạn. Cuộn xuống dưới nếu hình thấy như hình dưới đây, nghĩa là PHP GD đã kích hoạt.
check-php-gd-library-installed-or-not[1]

Cách khác để kiểm tra PHP GD trên web server thông qua sử dụng hàm, nếu PHP GD đã cài đặt và sẵn sàng sử dụng thì bạn sẽ có thêm hàm gd_info. Bằng cách kiểm tra hàm này có tồn tại không là biết ngay.

<?php
if (extension_loaded('gd') && function_exists('gd_info')) {
    echo "PHP GD library is installed on your web server";
}
else {
    echo "PHP GD library is NOT installed on your web server";
}
?>

Sử dụng captcha mặc định

Để tạo ảnh captcha chúng ta gọi hàm simple_php_captcha(). Chèn thư viện simple-php-captcha.php trước khi sử dụng.

<?php
session_start();
include("simple-php-captcha.php");
$_SESSION['captcha'] = simple_php_captcha();
?>

Sau khi gọi, hàm trả mảng chứa mã số và URL ảnh tương ứng với mã số đó. Chúng ta cần lưu thông tin này vào biến SESSION để so sánh sau khi người dùng nhấn submit form.

Array
(
     => hu5sF
    [image_src] => /simple-php-captcha/simple-php-captcha.php?_CAPTCHA&t=0.93480200+1413380000
)

Để hiển thị ảnh Captcha, bạn tạo thẻ img và chèn link ảnh vào thuộc tính 'src' lấy từ biến $_SESSION['captcha']['image_src'].
simple-php-captcha

Tại code lấy dữ liệu form để sử lý lưu vào dữ liệu, trước đó bạn sẽ kiểm tra giá trị 'code' $_SESSION['captcha']['code'] có khớp với trường nhập captcha của người dùng không. Nếu không đúng thì dừng chạy đoạn code sử lý chính.
Bạn có thể yêu cầu nhập đúng chữ hoa nếu có trong ký tự captcha hoặc không cần sử dùng 2 hàm trong khi so sánh strtolower(), strtoupper(). Ví dụ:

if(isset($_POST['submit'])){
	if(strtolower($_SESSION['captcha']['code'])==strtolower($_POST['captcha'])){
		
	}
}

Tùy biến nâng cao

Các tham số có thể sử dụng, cấu hình cho captcha được truyền vào hàm simple_php_captcha. Sử dụng một số các tùy chọn sau:

<?php

$_SESSION['captcha'] = simple_php_captcha( array(
	'min_length' => 5,
	'max_length' => 5,
	'backgrounds' => array(image.png', ...),
	'fonts' => array('font.ttf', ...),
	'characters' => 'ABCDEFGHJKLMNPRSTUVWXYZabcdefghjkmnprstuvwxyz23456789',
	'min_font_size' => 28,
	'max_font_size' => 28,
	'color' => '#666',
	'angle_min' => 0,
	'angle_max' => 10,
	'shadow' => true,
	'shadow_color' => '#fff',
	'shadow_offset_x' => -1,
	'shadow_offset_y' => 1
));

?>

Giải thích:

  • min_length, max_length: số ký tự trong hình captcha sẽ giao động ngẫu nhiên từ min_length đến max_length. Bạn có thể fix cố định lượng chữ cái bằng cách thiết lập một số chung cho 2 giá trị này, vd như trên.
  • backgrounds: hình nền cho captcha, cũng là để xác định kích thước ảnh, khai báo danh sách các hình nền với định dạng duy nhất .PNG. Captcha sinh ra sẽ lấy hình ngẫu nhiên trong số hình bạn liệt kê và kích thước của hình nền chính là kích thước của captcha. Chú ý: đường dẫn tới file ảnh dưới dạng tường minh (absolute). ie: $_SERVER['DOCUMENT_ROOT'] . '/' . [path-to-file]
  • fonts: font chữ hiển thị cho captcha, cũng giống như 'backgrounds', những lần load trang captcha sẽ tạo với nhiều fonts khác nhau, nếu bạn liệt kê nhiều fonts .TTF hoặc .OTF vào đây. Sử dụng absolute path tới file font như backgrounds.
  • characters: liệt kê các chữ cái được phép sử dụng tạo hình captcha.
  • min_font_size, max_font_size: những chữ cái trong hình captcha có thể hiển thị với nhiều kích thước font khác nhau. Font nhỏ nhất là 'min_font_size' và lớn nhất là 'max_font_size' các chữ cái tạo size ngẫu nhiên trong khoảng này. Lưu ý: điều chỉnh thông số này cho phù hợp tương ứng với kích thước của backgrounds, tránh font tràn ngoài vùng backgrounds.
  • color: mẫu chữ cái của captcha.
  • angle_min, angle_max: độ nghiêng toàn bộ chữ cái của captcha trong hình. Giá trị này không nên lớn hơn 15, captcha có thể hiển thị bên ngoài vùng backgrounds. Tuy nhiên bạn sẽ phải thiết lập giá trị này một con số từ [0-15] điều cho phù hợp với kích thước các backgrounds. Nếu bạn dùng nhiều backgrounds thì nên cùng kích thước.
  • shadow, shadow_color, shadow_offset_x, shadow_offset_y: thiết lập độ bóng cho text.

VD: tạo captcha hiển thị khác với mặc định:
captcha-example

Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: PHP Tìm kiếm: captcha

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.