Tôi không phải là người máy mã captcha trong PHP

Tôi vừa thấy thông báo về API reCAPTHCA sửa đổi của Google, vì vậy tôi quyết định tổng hợp một ví dụ nhanh. Nó hoạt động tốt mà không cần xem tài liệu. Quá đơn giản để tích hợp thật lố bịch. Đây là PHP (không có bảo mật cho đơn giản)…

if ( ! empty($_POST)) {
    $q = http_build_query(array(
        'secret'    => 'YOUR_SECRET_KEY',
        'response'  => $_POST['g-recaptcha-response'],
        'remoteip'  => $_SERVER['REMOTE_ADDR'],
    ));
    $result = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify?'.$q));
    if ($result->success) {
        // Continue processing form data
    }
}

Và html…


Đó thực sự là tất cả để có nó

Khen ngợi Google vì đã biến CAPTCHA bớt PITA hơn

Mã hóa vui vẻ 😀

Mục nhập này đã được đăng trong Đoạn mã và biểu mẫu được gắn thẻ, html, javascript, xác thực vào ngày 3 tháng 12 năm 2014 của Robert .

Ghi chú. Hướng dẫn này ban đầu được viết cách đây 10 năm. Nó hiện đã được cập nhật với mã hoàn toàn mới để tạo chuỗi ngẫu nhiên. Nhiều nhận xét trong chuỗi thảo luận đề cập đến phiên bản gốc của mã

Mọi người viết mã mỗi ngày để tự động hóa nhiều quy trình. Chúng tôi khai thác thực tế rằng máy tính nhanh hơn và chính xác hơn con người rất nhiều, điều này cho phép chúng tôi đơn giản hóa rất nhiều tác vụ thông thường. Thật không may, những khả năng tương tự này có thể được sử dụng để lập trình máy tính thực hiện điều gì đó độc hại như gửi thư rác hoặc đoán mật khẩu. Trọng tâm của hướng dẫn này sẽ là chống thư rác

Giả sử bạn có một trang web có biểu mẫu liên hệ để giúp khách truy cập dễ dàng liên hệ với bạn. Tất cả những gì họ phải làm là điền vào biểu mẫu và nhấn nút gửi để cho bạn biết về một vấn đề hoặc yêu cầu mà họ có. Đây là một tính năng quan trọng của trang web công khai, nhưng quá trình điền vào các giá trị biểu mẫu có thể được tự động hóa bởi những người dùng độc hại để gửi nhiều thư rác theo cách của bạn. Loại kỹ thuật gửi thư rác này không giới hạn ở các biểu mẫu liên hệ. Bot cũng có thể được sử dụng để lấp đầy diễn đàn của bạn bằng các bài đăng spam hoặc nhận xét liên kết đến các trang web có hại

Một cách để giải quyết vấn đề này là đưa ra một thử nghiệm có thể phân biệt giữa các bot đang cố phát tán thư rác và những người muốn liên hệ với bạn một cách hợp pháp. Đây là lúc biểu mẫu  CAPTCHA và PHP xuất hiện. Chúng thường bao gồm các hình ảnh với sự kết hợp ngẫu nhiên của năm hoặc sáu chữ cái được viết trên nền màu. Ý tưởng là con người sẽ có thể đọc văn bản bên trong hình ảnh, nhưng bot thì không. Kiểm tra giá trị hình ảnh CAPTCHA do người dùng điền so với bản gốc có thể giúp bạn phân biệt bot với con người. CAPTCHA là viết tắt của "bài kiểm tra Turing công khai hoàn toàn tự động để phân biệt máy tính và con người"

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách tạo CAPTCHA của riêng mình và sau đó tích hợp chúng với biểu mẫu liên hệ mà chúng ta đã tạo trong hướng dẫn

Cách tạo hình ảnh xác thực

Chúng ta sẽ sử dụng thư viện PHP GD để tạo CAPTCHA. Bạn có thể tìm hiểu thêm về cách viết văn bản và vẽ hình bằng GD trong một trong những hướng dẫn trước đây của tôi. Chúng tôi cũng sẽ phải viết một chút mã để tạo chuỗi ngẫu nhiên được viết trên hình ảnh được tạo. Một hướng dẫn khác, có tiêu đề Tạo chuỗi chữ và số ngẫu nhiên trong PHP, có thể giúp chúng tôi về vấn đề này

  • Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Kết xuất văn bản và hình dạng trên hình ảnh trong PHP

    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Monty Shokeen

    20 tháng năm 2022

  • Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Tạo chuỗi chữ và số ngẫu nhiên trong PHP

    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Monty Shokeen

    23 Thg 11 2020

Tạo chuỗi ngẫu nhiên

Tất cả mã từ phần này sẽ có trong hình ảnh xác thực. tệp php. Hãy bắt đầu bằng cách viết hàm để tạo chuỗi ngẫu nhiên

1

2
3
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
4
 
5

0

1

0

1

2

3

4

5

6

7

8

9
2
0
2
1
 
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2_____453___5

Biến 

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
17 lưu trữ tất cả các ký tự mà chúng tôi muốn sử dụng để tạo chuỗi CAPTCHA của mình. Chúng tôi chỉ sử dụng các chữ in hoa trong bảng chữ cái tiếng Anh để tránh bất kỳ sự nhầm lẫn nào có thể phát sinh do các chữ cái hoặc số có thể trông giống nhau. Bạn có thể sử dụng bất kỳ bộ ký tự nào bạn muốn để tăng hoặc giảm độ khó của CAPTCHA

Hàm của chúng tôi tạo một chuỗi gồm năm chữ cái theo mặc định, nhưng bạn có thể thay đổi giá trị đó bằng cách chuyển một tham số khác cho hàm 

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
18

Tạo chuỗi ngẫu nhiên bảo mật bằng mật mã

Bạn có thể sử dụng các hàm bảo mật bằng mật mã để tạo các chuỗi ngẫu nhiên và làm cho dạng CAPTCHA PHP khó đoán hơn

Trong trường hợp cụ thể này, chúng ta có thể sử dụng hàm 

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
19 thay cho 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
20. Nó chấp nhận hai tham số giống nhau nhưng tạo ra các số ngẫu nhiên được bảo mật bằng mật mã. Đây là mã sửa đổi của chúng tôi để tạo các chuỗi ngẫu nhiên

1

2
3
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
4
 
5
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
4

1

0

1

2

3

4

5
4
2

7
4
4

9
4
6
2
1
4
8
2
3
 
0
2
5

8
2
7
2
0
2
8
 
3
0
2
4
3
2
2
6
3
3
3
4
2
9
5
4
5
5
5
6
5
7
5
8
3
5

Thay đổi duy nhất mà chúng tôi thực hiện ở đây là việc sử dụng tham số thứ ba trong hàm 

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
18 của chúng tôi. Tham số thứ ba này được gọi là 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
22 được đặt thành 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
23 theo mặc định. Ở đoạn mã sau, chúng tôi kiểm tra xem 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
22 có được đặt thành 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
23 và sau đó sử dụng 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
19 để tạo chuỗi hay không

Việc sửa đổi chức năng của chúng tôi theo cách này cho phép chúng tôi tạo đầu ra của tất cả các lần gọi hàm trước đó của chúng tôi về mặt bảo mật bằng mật mã mà không thực hiện bất kỳ thay đổi nào đối với mã cũ. Nó cũng cho phép chúng tôi tạo các chuỗi ngẫu nhiên không bảo mật bằng mật mã bằng cách đặt rõ ràng tham số thứ ba thành

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
27 trong bất kỳ cuộc gọi nào trong tương lai

Cách tạo hình nền CAPTCHA

Khi chúng tôi có chuỗi ngẫu nhiên, đã đến lúc viết mã để tạo hình ảnh CAPTCHA cho nền của chúng tôi. Nền hình ảnh CAPTCHA sẽ có kích thước 200 x 50 pixel và sẽ sử dụng năm màu khác nhau cho nền

1

2
3

04
4
5

07

1

1

10

3

5

13

7

15

9

17
2
1
2
3

00
2
5

02
2
7
2
6
2
8
3
0

07
3
2
3
3

10
3
4

12
5
4

14
5
6

16
5
7
2
6
5
8

20
3
5

Chúng tôi bắt đầu với các giá trị ngẫu nhiên cho các biến 

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
28, 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
29 và 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
30. Các giá trị này xác định màu cuối cùng của nền hình ảnh CAPTCHA. Sau đó, chúng tôi chạy một vòng lặp
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
31 để tạo ra các sắc thái tối dần của màu gốc. Những màu này được lưu trữ trong một mảng. Màu sáng nhất là phần tử đầu tiên của mảng 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
32 của chúng ta và màu đậm nhất là phần tử cuối cùng. Màu nhạt nhất được sử dụng để lấp đầy toàn bộ nền của hình ảnh

Trong bước tiếp theo, chúng tôi sử dụng vòng lặp 

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
31 để vẽ các hình chữ nhật tại các vị trí ngẫu nhiên trên hình ảnh ban đầu của chúng tôi. Độ dày của hình chữ nhật thay đổi trong khoảng từ 2 đến 10, trong khi màu được chọn ngẫu nhiên từ bốn giá trị cuối cùng của mảng 
$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
32 của chúng ta

Vẽ tất cả các hình chữ nhật này sẽ thêm nhiều màu hơn vào nền, khiến việc phân biệt nền trước của chuỗi CAPTCHA với nền của hình ảnh khó hơn một chút

Nền hình ảnh CAPTCHA của bạn bây giờ trông giống như hình ảnh CAPTCHA sau

Đây là một ví dụ về CAPTCHA PHP của nền

Tôi không phải là người máy mã captcha trong PHP
Tôi không phải là người máy mã captcha trong PHP
Tôi không phải là người máy mã captcha trong PHP

Kết xuất chuỗi CAPTCHA

Đối với bước cuối cùng, chúng ta chỉ cần vẽ chuỗi CAPTCHA trên nền của mình. Màu sắc, tọa độ y và xoay của các chữ cái riêng lẻ được xác định ngẫu nhiên để làm cho chuỗi CAPTCHA khó đọc hơn

1

2
3

26
4

28
5

30

1

1

33

3

5
2
9

7
5
5

9
2
1

41
2
3

43
2
5

45
2
7

47
2
8

49
3
0
2
6
3
2
3
3

54
3
4

56
5
4

58
5
6
5
7
3
5

Như bạn có thể thấy, tôi đang sử dụng một số phông chữ mà tôi đã tải xuống từ Google để có một số biến thể trong các ký tự. Có một khoảng đệm 15 pixel ở cả hai bên của hình ảnh. Không gian còn lại—170 pixel—được chia đều cho tất cả các chữ cái CAPTCHA của biểu mẫu PHP

Sau khi hiển thị chuỗi văn bản phía trên nền, kết quả của bạn sẽ giống như hình bên dưới. Các ký tự sẽ khác, nhưng chúng phải được xoay nhẹ và có sự pha trộn giữa màu đen và trắng

Đây là một ví dụ về CAPTCHA PHP về nền và các chữ cái

Tôi không phải là người máy mã captcha trong PHP
Tôi không phải là người máy mã captcha trong PHP
Tôi không phải là người máy mã captcha trong PHP

Thêm CAPTCHA vào Biểu mẫu liên hệ PHP của chúng tôi

Bây giờ chúng tôi đã tạo CAPTCHA của mình, đã đến lúc thêm nó vào biểu mẫu liên hệ của chúng tôi. Chúng tôi sẽ sử dụng biểu mẫu liên hệ từ hướng dẫn trước của tôi về cách tạo biểu mẫu liên hệ PHP và thêm CAPTCHA ngay phía trên nút Gửi tin nhắn

Chúng tôi sẽ sử dụng các phiên để lưu trữ văn bản CAPTCHA và sau đó xác thực văn bản do khách truy cập trang web nhập vào. Đây là mã hoàn chỉnh của hình ảnh xác thực của chúng tôi. tệp php

1

2
3

66
4
5

69

1
 

1

73

3

0

5

2

7

4

9

6
2
1

8
2
3
2
0
2
5
 
2
7
2
4
2
8
2
6
3
0
3
2

04
3
3
3
4

07
5
4
5
6

10
5
7
5
8

13

20

15
2
06

17
2
08
2
09

00
2
11

02
2
13
2
6
2
15
2
16

07
2
18
2
19

10
2
21

12
2
23
2
24
2
25
2
26
2
27
2
6
2
29
2
30

26
2
32

28
2
34

30
2
36
2
37

33
2
39
2
40
2
9
2
42
3
1
2
44
2
45
2
46
2
47
2
48

41
2
50

43
2
52

45
2
54

47
2
56__

Các phông chữ bạn muốn sử dụng sẽ đi vào thư mục phông chữ. Giờ đây, bạn chỉ cần thêm mã HTML sau vào phía trên nút Gửi tin nhắn từ hướng dẫn trước của chúng tôi về cách tạo biểu mẫu liên hệ trong HTML và PHP

1
2
70____4
2
72
3
2
74
4
2
76
5
2
78

1
2
80

Đôi khi, biểu mẫu PHP và văn bản CAPTCHA sẽ khó đọc ngay cả đối với con người. Trong những tình huống này, chúng tôi muốn họ có thể yêu cầu biểu mẫu mới với CAPTCHA theo cách thân thiện với người dùng. Biểu tượng làm lại ở trên giúp chúng tôi thực hiện chính xác điều đó. Tất cả những gì bạn phải làm là thêm đoạn JavaScript bên dưới vào cùng trang với HTML cho biểu mẫu liên hệ

1
____482____4____484
3
2
86
4
2
6

Sau khi tích hợp biểu mẫu PHP và CAPTCHA và thêm nút làm mới, bạn sẽ nhận được một biểu mẫu giống như hình bên dưới. Hãy xem ví dụ về CAPTCHA PHP sau đây

Tôi không phải là người máy mã captcha trong PHP
Tôi không phải là người máy mã captcha trong PHP
Tôi không phải là người máy mã captcha trong PHP

Bước cuối cùng trong quá trình tích hợp biểu mẫu với CAPTCHA mà chúng tôi đã tạo với biểu mẫu liên hệ liên quan đến việc kiểm tra biểu mẫu PHP và giá trị CAPTCHA do người dùng nhập vào khi điền vào biểu mẫu và khớp nó với giá trị được lưu trữ trong phiên. Cập nhật liên hệ. php từ hướng dẫn trước để có mã sau

1

2
3

66
4
5
2
96

1
2
98

1
3
00

3
3
02

5
3
04

7
3
06

9
2
1
3
09
2
3
3
11
2
5
3
13
2
7
3
15
2
8
 
0
3
0
3
19
3
2
3
21
3
3
3
23
3
4
3
25
5
4
3
27
5
6
 
0
5
7
3
19
5
8
3
33

20
3
35
2
06
 
0
2
08
3
19
2
09
3
41
2
11
3
43
2
13
 
0
2
15
3
19
2
16
3
49
2
18
3
51
2
19
 
0
2
21
3
19
2
23
3
57
2
25
3
59
2
27
 
0
2
29
3
63
2
30
3
65
2
32
 
0
2
34
3
69
2
36
3
71
2
37
 
0
2
39
3
75
2
40
3
77
2
42
 
0
2
44
3
19
2
45______

Chúng tôi đã cập nhật tệp này để trước tiên kiểm tra xem giá trị mã CAPTCHA PHP được lưu trữ trong phiên có giống với giá trị mà người dùng nhập vào hay không. Nếu chúng khác, chúng tôi chỉ cần thông báo cho khách truy cập rằng họ đã nhập CAPTCHA không chính xác. Bạn có thể xử lý tình huống khác nhau dựa trên những gì dự án của bạn cần

Suy nghĩ cuối cùng về biểu mẫu với CAPTCHA

Trong hướng dẫn này, chúng tôi đã tạo CAPTCHA tùy chỉnh bằng PHP từ đầu và tích hợp nó với biểu mẫu liên hệ PHP mà chúng tôi đã tạo trong một trong các hướng dẫn trước đây của mình. Chúng tôi cũng làm cho biểu mẫu với CAPTCHA thân thiện hơn với người dùng bằng cách thêm nút làm mới để người dùng nhận được một chuỗi mới với nền mới trong trường hợp chuỗi trước đó không thể đọc được

Bạn cũng có thể sử dụng logic từ hướng dẫn này để tạo một hình ảnh CAPTCHA dựa trên việc giải các phương trình toán học cơ bản như cộng và trừ

Nếu bạn muốn thêm hình ảnh CAPTCHA vào trang web của mình, bạn nên xem một số biểu mẫu và plugin CAPTCHA có sẵn từ CodeCanyon. Một số trong số này có CAPTCHA và nhiều tính năng khác như trình tải tệp lên được tích hợp sẵn

  • Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    18 tập lệnh PHP biểu mẫu liên hệ tốt nhất cho năm 2022

    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Monty Shokeen

    11 tháng năm 2022

  • Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    So sánh 5 Trình tạo biểu mẫu PHP tốt nhất (Và 3 Tập lệnh miễn phí)

    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Monty Shokeen

    28 Thg 11 2021

  • Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    19 Biểu mẫu đăng nhập và đăng ký PHP để tải xuống

    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP
    Tôi không phải là người máy mã captcha trong PHP

    Daniel Stern

    15 Th08 2021

Nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào, vui lòng cho tôi biết trong phần bình luận. Bạn cũng nên xem danh sách các biểu mẫu liên hệ PHP tốt nhất này

Làm cách nào để sử dụng mã CAPTCHA trong PHP?

Tạo PHP Captcha với Thư viện GD . Tạo một số ngẫu nhiên với 6 ký tự. Đây sẽ là mã bảo mật. Tạo một hình ảnh xác thực cơ bản bằng cách sử dụng các chức năng tích hợp trong thư viện GD. Set captcha code in the PHP session. Generate a random number with 6 characters. This will be out security code. Create a basic captcha using the GD library built-in functions.

Làm cách nào để kiểm tra CAPTCHA trong PHP?

php"; $captcha = new Captcha(); if (count($_POST) > 0) { $userCaptcha = filter_var($_POST["captcha_code"], FILTER_SANITIZE_STRING); $isValidCaptcha = $captcha->validateCaptcha($userCaptcha)

Làm cách nào để thêm Google CAPTCHA trong PHP?

Cách tiếp cận. .
Đăng ký trang web của bạn tại Google reCAPTCHA
Gửi biểu mẫu HTML
Nhận khóa phản hồi ở phía máy chủ
Xác minh lại khóa và đưa ra phản hồi cho người dùng cuối

Làm cách nào để thêm CAPTCHA vào biểu mẫu liên hệ PHP?

Tích hợp Google reCAPTCHA trong Biểu mẫu liên hệ PHP 8 .
Tạo khóa API bảo mật & trang web reCAPTCHA
Tạo biểu mẫu HTML bằng Bootstrap
Tích hợp reCAPTCHA dưới dạng PHP
Xác thực phản hồi bằng Google reCAPTCHA
Gửi email để đăng dữ liệu biểu mẫu trong PHP