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)… Show
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ựcChú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ạo chuỗi ngẫu nhiênTấ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
920 21 23 24 25 26 27 28 29 30 31 32_____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
542
744
946 21 48 23 0 25
827 20 28 30 24 32 26 33 34 29 54 55 56 57 58 35 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 CAPTCHAKhi 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
110
3
513
715
917 21 23
0025
0227 26 28 30
0732 33
1034
1254
1456
1657 26 58
2035 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 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
264
285
301
1
33
3
529
755
921
4123
4325
4527
4728
4930 26 32 33
5434
5654
5856 57 35 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 Thêm CAPTCHA vào Biểu mẫu liên hệ PHP của chúng tôiBâ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
664 5
691
1
73
3
0
5
2
7
4
9
621
823 20 25 27 24 28 26 30 32 04 33 34 07 54 56 10 57 58 13
2015 206 17 208 209
00211
02213 26 215 216
07218 219
10221
12223 224 225 226 227 26 229 230
26232
28234
30236 237
33239 240 29 242 31 244 245 246 247 248
41250
43252
45254
47256__ 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 270____4 272 3 274 4 276 5 278 1 280 Đô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 286 4 26 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 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
664 5 296 1 298
1300
3302
5304
7306
921 309 23 311 25 313 27 315 28 0 30 319 32 321 33 323 34 325 54 327 56 0 57 319 58 333
20335 206 0 208 319 209 341 211 343 213 0 215 319 216 349 218 351 219 0 221 319 223 357 225 359 227 0 229 363 230 365 232 0 234 369 236 371 237 0 239 375 240 377 242 0 244 319 245______ 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 CAPTCHATrong 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
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 |