Module xác thực bằng captcha

Một phần của tài liệu Xây dựng giải pháp chống tấn công từ chối dịch vụ trên tầng ứng dụng cho websites (Trang 37 - 39)

Module này được triển khai dùng dịch vụ recaptcha của google để tạo tính đơn giản. Trong phần này xử dụng hai thư viện của lua để viết lại phần xác thực captcha với phía server của người dùng là lua-cjson và luasec. Phần tạo captcha cho người dùng rất đơn giản bằng mã html như sau:

<html> <head>

<title>Ecofair</title>

<script src="https://www.google.com/recaptcha/api.js" async defer></script> </head>

<body>

<form action="/cgi-bin/ecofair-captcha" method="GET"> <div class="g-recaptcha" data-sitekey="site’s key"></div> <br/>

<input type="submit" value="Submit">

</form> </body> </html>

Trong đó site’s key là mã được google cung cấp cho người dùng khi đăng ký dịch vụ recaptcha của google.

Module xác thực này do dùng version mới hơn của recaptcha và chưa có thư viện nào của lua thực hiện xác thực với google nên tác giả tự viết phần xác thực với phía server của google xem phần captcha nhập vào có hợp lệ không.

function verify_captcha(g_recaptcha_response) local https = require 'ssl.https'

local cjson = require 'cjson'

--- -- https://www.google.com/recaptcha/api/siteverify

-- secret Required. The shared key between your site and ReCAPTCHA.

-- response Required. The user response token provided by the reCAPTCHA to the user and provided to your site on.

-- remoteip Optional. The user's IP address.

---

local recaptcha_url = "https://www.google.com/recaptcha/api/siteverify" local body, code, headers, status = https.request(recaptcha_url, "secret=" .. recaptcha_secret .. "&response=" .. g_recaptcha_response)

local data = cjson.decode(body)

--- -- {

-- "success": true|false,

-- "challenge_ts": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)

-- "hostname": string, // the hostname of the site where the reCAPTCHA was solved -- "error-codes": [...] // optional -- } --- if (data['success']) then return true end return false end 30

Khi người dùng giải thành công captcha và submit lại lên thì sẽ tạo cookie xác thực cho người dùng thông qua header của kết quả trả về dùng module lua-resty-cookie của openresty.

local ok, err = cookie:set({

key = ecofair_cookie_name, value = digest })

Một phần của tài liệu Xây dựng giải pháp chống tấn công từ chối dịch vụ trên tầng ứng dụng cho websites (Trang 37 - 39)

Tải bản đầy đủ (PDF)

(60 trang)