post image

Cách tạo CAPTCHA

CAPTCHA là chữ viết tắt của “Completely Automated Public Turing test to tell Computers and Humans Apart”. Nói ngắn gọn thì nó là cách để giảm spam đặc biệt là những trang web cho phép đăng ký thành viên, gửi form liên lạc. Có rất nhiều chương trình spam tự động mà nếu không có CAPTCHA hoặc những biện pháp ngăn chặn tương ứng. Thì bạn rất có thể trở thành nạn nhân của Spam.

Trong bài này tôi không cố gắng tạo ra một CAPTCHA có tính bảo mật cao mà tôi chỉ tạo ra một dạng CAPTCHA sử dụng được với những trang web bình thường. Bởi vì hiện giờ có rất nhiều dạng CAPTCHA với các thuật toán phức tạp hơn trong ví dụ này rất nhiều. Tuy code trong bài này không ngăn chặn được những spam bot tinh vi, nhưng những “con” tầm tầm thì diệt tốt. Thêm vào đó trong bài này tôi cũng giới thiệu luôn về một số “hàm” trong PHP cho phép tạo hình ảnh.

Thời lượng: 30:00

Download định dạng .avi chất lượng cao: MediaFire

Dung lượng: 141 MB

Bên lề sân cỏ

Học xong video này chắc chắn bạn có thể tự tạo CAPTCHA cho riêng mình, nhưng có một cách nữa lợi cả đôi đường là sử dụng dịch vụ miễn phí ReCAPTCHA của trường đại học Carnegie Mellon. Bạn không những có một dạng CAPTCHA vô cùng an toàn mà bạn còn giúp đỡ số hóa sách báo. Bởi vì mỗi ngày có đến 200 triệu lượt CAPTCHA được người ta điền vào. Tại sao chúng ta cứ phải phung phí công sức vào mấy thuật toán tạo chữ ngẫu nhiên. Sao chúng ta không sử dụng chúng có ích hơn bằng cách giúp đỡ số hóa sách báo.

Trước đây sách báo in ra đã cũ, người ta muốn số hóa nó để nhân loại đỡ mất đi những kiệt tác văn chương hoặc những tư liệu quý. Sau khi họ scan họ sẽ sử dụng công nghệ đọc chữ từ màn hình để số hóa nó như sau:

captcha

Như bạn thấy công nghệ nhận dạng chữ tự động OCR (Optical Character Recognition) không thực sự chính xác. ReCAPTCHA hiệu quả hơn nhiều vì có người thực đọc nó. Cách hoạt động của nó cũng khá đơn giản. Nó lấy trong dữ liệu của nó những từ mà OCR đã bó tay và kết hợp với một từ nó biết. Cho hiển thị ra màn hình và người dùng gõ cả 2 từ, nếu từ nó biết đúng với từ người dùng gõ, nó sẽ kết luận rằng từ kia cũng đúng.

Nếu bạn có ý định sử dụng CAPTCHA hãy sử dụng chương trình trên để đỡ lãng phí nhân lực và giúp đỡ cộng đồng.

«

»

35 Comments

( Comment bài này )
  1. Lê Văn Kiên says:

    Anh DW ơi. Sao mà em chạy trên host thì ok nhưng chạy trên localhost thì bị lỗi. Em dùng Xamp

  2. Anh ơi, cái video mà em down ở trang mediafire về không xem được, chỉ có tiếng thôi.
    Anh xem lại dùm em cái, các bài của anh nói rất dễ hiểu. Cảm ơn anh vì các tutorial của anh!

    • đơn giản là bạn tải thêm phần mềm VLC sẽ thấy được hình thôi, vì định dạnh video ở đây là .avi mà, windows media player không đọc được định dạng này.

  3. hands boy says:

    Xin chao admin cho minh hoi chut:
    minh lam theo huong dan nhung den phan chay trang index.php no ko hien thi dc hinh anh vay?

  4. sadasd says:

    adasdasd

  5. Minh Tuan says:

    Sao chưa có phần mới vậy mấy anh

  6. hùng says:

    cái video trên lúc đến chổ “red” các anh nghĩ bậy. nghe lời nói thì đơn giản nhưng các anh nghĩ bậy rõ ràng, e cũng nghĩ bậy lun!
    kaka!

  7. Minh says:

    Anh DW cho e hỏi tí. E đã download cái phần demo của a về captcha nhưng mà sao khi e thử chạy nó lại báo là có lỗi nên không hiện thị được. khi e bỏ hai dòng vể random stuff đi và e gán $text=”hello word” thì nó mới hiển thị được a có thể giải thích phần đó cho e được không

  8. tran says:

    e chạy thử file tạo captcha này , nhưng image ‘captcha.php’ không đọc được.
    cụ thể là: khi chạy file ‘index.php’ trên localhost thì không báo lỗi nhưng phần ‘captcha’ thì không hiển thị trên trình duyệt.
    Mong a chị giúp đỡ. e đã thr mọi cách mà k sửa đc.

  9. Trương Tuấn says:

    Anh DW và mọi người ơi, cho em hỏi về cái code “imagettftext”
    Sao em làm và chạy trên Appserv ( hỗ trợ PHP 5.2.6 ) thì chạy ok hết. Ảnh và ký tự capcha hiện ra bình thường nhưng khi em up len host hỗ trợ PHP 5.2.13 thì lại không hiện ra ký tự capchar mà chỉ có file hình nền
    Nhưng khi em sử dụng code “imagestring” thay cho code “imagettftext” để hiện capcha thì ok. Em biết thì giúp em với. Em muốn sử dụng imagettftext vì nó có thể chèn thêm được font chữ. Thank mọi người trước

  10. KytoSai says:

    Chả hiểu sao cái header() giờ kô dùng được nữa rồi anh, cả file anh làm giờ cũng hết xem đc rồi >.<

  11. zhaolong says:

    Anh DW, cảm ơn anh đã làm rất nhiều video hữu ích cho tụi em mới bước đầu về học thiết kế và lập trình wed.

    Qua bài hướng dẫn này e đã biết làm Captcha. Cảm ơn anh rất nhiều. Nói về Captcha thì anh đã hướng dẫn…hơi kỹ rùi. Tiện thể anh có thể dành chút ít thời gian để hướng dẫn giúp em về cách xử lý Captcha trong một trang ĐăngKý khi mình load cái Captcha này vào không.

    Đại loại là nó giống cái đoạn cuối của video Captcha này nè. Mà bây giờ e muốn nó giống như trang Đăng Ký này. Tiện thể a có thể hướng dẫn tạo 1 trang đăng ký có mấy cái dấu tick Xanh Xanh khi mình điền thông tin vào được không ạ.

    Tại e đang tìm mấy cái tài liệu về mấy trang Đăng Ký, mà hem thấy đâu hết. Rùi em mò vào đc trang này, thấy hay hay mà bí quá nên…nhờ anh giúp hjhj.

    Hình Ví Dụ của “em nó” đây ạh:
    [IMG]http://i229.photobucket.com/albums/ee34/tieulongca90/dangky.jpg[/IMG]

    trang đăng ký đây anh: http://home.musieuhay.com/#register

    Em cảm ơn anh rất nhiều nhìu nhìu.

  12. Hien says:

    Em đang thắc mắc là nếu k thấy rõ chữ, người đăng kí muốn load 1 ảnh captcha khác thì phải làm sao ạ ?

  13. Định says:

    Sao mình làm y nguyên nhưng lúc nào

     $_SESSION['code'] 

    vẫn nguyên 1 giá trị là 5f001 vậy nhỉ Hixx

  14. Van Nguyen says:

    Đọc xong bài này e làm được rồi. Nhưng a ơi cho em hỏi thêm một chút ngoài lề. E thấy anh có nói đến Công nghệ đọc ảnh bằng OCR. Anh có biết phần mềm hay trang web nào chuyển ảnh sang text sử dụng được Anh mail cho em với. free hoặc có phí! Em cảm ơn!!

  15. tung1709 says:

    Em đá làm đươc phần captcha rùi
    Chạy ok
    Nhưng mấy hôm nay em thử chạy lại bài cũ thì không được nữa
    Nó báo sai ở imagecreate
    Không hiểu khắc phục sao vậy ?
    Có phải lỗi đó do sever gì không anh

  16. kaka171 says:

    Cảm ơn anh DW nhiều nhiều,nhờ anh mà em làm đc cái captcha cho riêng mình.hehe…anh DW có thể làm thêm phần refresh captcha luôn được không?Nếu được thì cảm ơn anh DW nhiều nhiều lắm luôn.

  17. Mr Noname says:

    Mình vẫn đang học lỏm code viết đk đoạn check captcha rồi nhưng ko hiểu gán hàm cho nó chạy, ví dụ post comment từ captcha.

  18. boykatty says:

    chờ mong tut về feed của anh dm

  19. htluds says:

    lỗi đoạn security_code em nghĩ là do form cũ bên firefox cái input vẫn name là code, khi refresh anh chọn Resend nên nó gửi biến code chứ chưa phải security_code :D

  20. Bot là dạng robot hay là các phần mềm được viết ra để spam form. Còn nó hoạt động ntn thì anh cũng chịu.

  21. tuantu says:

    bot là j hả anh ? nó làm cách nào để đoc được cả chữ vậy ? giải thích e với

  22. Chính nó đấy! như tôi nói trong bài này tôi chỉ muốn giới thiệu đến các bạn những hàm về image trong PHP và cách ứng dụng thực tiễn của nó.

    Còn về tạo ra một captcha hoàn chỉnh thì đòi hỏi rất nhiều thuật toán phức tạp khác chứ không đơn giản như ở trên. Có người còn sử dụng cả CSS để cho tấm hình làm background chứ không sử dụng thẻ ` vì bot được lập trình để đọc chữ trên màn hình.

  23. pn2design says:

    Rất bổ ích cho các bạn mới tìm hiểu về vụ này. Nhưng cũng nhắc bác DW một chút rằng: Nếu chỉ vậy thôi thì có 1 lỗ hổng hơi bị nghiêm trọng đấy. Tôi ước gì cái demo của bác có lưu database để có thể cho bác thấy hàng chục nghìn record mới thêm vào…
    Thực ra là thế này, chuổi security mới chỉ được tạo ra khi trình duyệt load file hình captcha.php (điều mà các con bot không làm _ hoặc nó chỉ làm lần đầu tiên mà thôi, các lần sau nó dùng lại security_code lần đầu _ do file captcha.php không được load lại nên sẽ không có mã mới cho security_code)
    Cách giải quyết: Phát sinh mã ngẫu nhiên trong file index.php của bác hoặc reset biến Session ấy trong file index.php sau khi kiểm tra xong đồng thời kiểm tra security_code không được rỗng.
    Bạn nào làm theo hướng dẫn này của bác DW thì cũng nên động não một chút xíu nữa mới được nhé!

    • honnhienh says:

      Mình cũng mới coi cái video tụi nó hack captcha trong mấy phút ah. Đang nghiên cứu làm cái này.Giải pháp hiện tại vẫn là dùng thư viện mã nguồn mở chưa giám đưa của mình vào để chạy.

  24. Yep! chú không nhắc thì anh cũng quên mất. Mầy lần định làm mà cứ quên. Thx chú nhé. Phải có người như thế thì trang web mới ngày càng tốt hơn chứ.

  25. nevermore says:

    Anh ơi, làm xong phần capcha rồi mà anh chưa gạch bên phần upcomming kà. :d, đừng trách em vì cái tội bới lông tìm vết, em chỉ muôn trang web của anh ngày càng hoàn thiện, không còn một tí sai sót nào – xứng đáng làm thần tượng của tụi em.

  26. nmhoang310 says:

    to Phùng Anh Tú: Bên ASP.NET cũng có cách làm với ý tưởng tương tự, dùng 1 hàm tạo 1 dãy số auto, sau đó biến dãy số đó thành 1 file hình. Đây là trang hướng dẫn bạn làm điều đó: http://www.codeproject.com/KB/aspnet/CaptchaImage.aspx.

  27. Unknown says:

    Anh DW cho em hỏi cách chèn ac_runactivecontent.js vào html cái đc hok. Em đang định làm 1 trang có cái này mà chèn đủ cách nó ko nhận. Nó còn làm lỗi luôn cái menu của em. Thanks anh trước

  28. Phùng Anh Tú says:

    Ah. Mấy chỗ anh làm em cười đau bụng đấy =)). Có trang nào ghi dumb ass khi anh gõ sai k? =))
    Anh cho em hỏi là: Vậy khi viết captcha bằng ASP, nó có các cái hàm tạo ảnh như php k không ạ?. Nếu k có các hàm tương tự thì phải làm sao ạ? Em chưa học asp advance nên k biết :( .
    Có cách nào viết captcha dùng cho được cả php, asp, asp.net, html… không ạ?
    Em cảm ơn anh.

  29. Phùng Anh Tú says:

    Cảm ơn anh DW rất nhiều! Bài nào của anh cũng bổ ích và hay.

  1. BB
  2. BB
  3. BB

arrow

Lưu ý khi post comment:

  • Không "bóc tem" topic
  • Dùng lời lẽ có văn hoá và lịch sự
  • Xem trang FAQs trước khi hỏi
  • Bạn có thể dùng thẻ HTML như:<strong>, <em>, <a>
  • Đặt code trong thẻ [php],[html],[javascript],[css]

Chọn kiểu gõ: Tự động TELEX VNI Tắt