Txhawm rau npaj kev tso cai nrog captcha, peb xav tau thiab nws cov plugins , , , , , , , . (Kuv muab cov ntawv txuas rau kuv rab diav rawg, vim kuv tau hloov qee yam uas tseem tsis tau raug thawb mus rau hauv cov chaw khaws cia qub. Koj tuaj yeem siv tau. .)
Pib nrog, cia peb teeb
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";Tom ntej no, tsuas yog nyob rau hauv rooj plaub, lov tes taw qhov tso cai header
more_clear_input_headers Authorization;Tam sim no peb tiv thaiv txhua yam nrog kev tso cai
auth_request /auth;
location =/auth {
internal;
subrequest_access_phase on; # ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°Π·Ρ Π² ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡΠ΅
auth_request off; # Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
set_decode_base64 $auth_decode $cookie_auth; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΠΊΡΠΊΡ
set_decrypt_session $auth_decrypt $auth_decode; # ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΠΊΡΠΊΡ
if ($auth_decrypt = "") { return 401 UNAUTHORIZED; } # Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ, ΡΠΎ Π·Π½Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½
more_set_input_headers "Authorization: Basic $auth_decrypt"; # ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° basic (ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ $remote_user)
auth_basic_ldap_realm Auth; # Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ldap Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
auth_basic_ldap_url ldap://ldap.server.com; # Π·Π°Π΄Π°ΡΠΌ Π°Π΄ΡΠ΅Ρ
auth_basic_ldap_bind_dn dn.server.com; # Π·Π°Π΄Π°ΡΠΌ ΠΏΠΎΡΡΡΠΈΠΊΡ
echo -n OK; # ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½
}Rau cov neeg siv tau tso cai peb qhia cov ntsiab lus los ntawm lawv cov ntawv tais ceev tseg
location / {
alias html/$remote_user/;
}Thiab yog tias tsis muaj kev tso cai, peb pom daim ntawv tso cai nrog lub captcha
error_page 401 = @error401;
location @error401 {
set_escape_uri $request_uri_escape $request_uri; # ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ
return 303 /login?request_uri=$request_uri_escape; # ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π½Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ, ΡΠΎΡ
ΡΠ°Π½ΠΈΠ² Π·Π°ΠΏΡΠΎΡ
}
location =/login {
default_type "text/html; charset=utf-8"; # Π·Π°Π΄Π°ΡΠΌ ΡΠΈΠΏ
if ($request_method = GET) { # Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ
template login.html.ct2; # Π·Π°Π΄Π°ΡΠΌ ΡΠ°Π±Π»ΠΎΠ½
ctpp2 on; # Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ
set_secure_random_alphanum $csrf_random 32; # Π·Π°Π΄Π°ΡΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ csrf
encrypted_session_expires 300; # Π·Π°Π΄Π°ΡΠΌ Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ csrf 5 ΠΌΠΈΠ½ΡΡ (5 * 60 = 300)
set_encrypt_session $csrf_encrypt $csrf_random; # Π·Π°ΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ csrf
set_encode_base64 $csrf_encode $csrf_encrypt; # ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ csrf
add_header Set-Cookie "CSRF=$csrf_encode; Max-Age=300"; # ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ csrf Π² ΠΊΡΠΊΡ Π½Π° 5 ΠΌΠΈΠ½ΡΡ (5 * 60 = 300)
return 200 "{"csrf":"$csrf_random"}"; # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ json Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ°
} # ΠΈΠ½Π°ΡΠ΅ - ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ
set_form_input $csrf_form csrf; # ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ csrf ΠΈΠ· ΡΠΎΡΠΌΡ
set_unescape_uri $csrf_unescape $csrf_form; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ csrf ΠΈΠ· ΡΠΎΡΠΌΡ
set_decode_base64 $csrf_decode $cookie_csrf; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ csrf ΠΈΠ· ΠΊΡΠΊΠΈ
set_decrypt_session $csrf_decrypt $csrf_decode; # ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ csrf ΠΈΠ· ΠΊΡΠΊΠΈ
if ($csrf_decrypt != $csrf_unescape) { return 303 $request_uri; } # Π΅ΡΠ»ΠΈ csrf ΠΈΠ· ΡΠΎΡΠΌΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ csrf ΠΈΠ· ΠΊΡΠΊΠΈ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π½Π° ΠΏΠΎΠΊΠ°Π· ΡΠΎΡΠΌΡ ΡΠ½ΠΎΠ²Π°
set_form_input $captcha_form captcha; # ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ°ΠΏΡΡ ΠΈΠ· ΡΠΎΡΠΌΡ
set_unescape_uri $captcha_unescape $captcha_form; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΠΏΡΡ ΠΈΠ· ΡΠΎΡΠΌΡ
set_md5 $captcha_md5 "secret${captcha_unescape}${csrf_decrypt}"; # ΡΡΠΈΡΠ°Π΅ΠΌ md5
if ($captcha_md5 != $cookie_captcha) { return 303 $request_uri; } # Π΅ΡΠ»ΠΈ md5 Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΊΠ°ΠΏΡΠ΅ΠΉ ΠΈΠ· ΠΊΡΠΊΠΈ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π½Π° ΠΏΠΎΠΊΠ°Π· ΡΠΎΡΠΌΡ ΡΠ½ΠΎΠ²Π°
set_form_input $username_form username; # ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π»ΠΎΠ³ΠΈΠ½ ΠΈΠ· ΡΠΎΡΠΌΡ
set_form_input $password_form password; # ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ· ΡΠΎΡΠΌΡ
set_unescape_uri $username_unescape $username_form; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠ½ ΠΈΠ· ΡΠΎΡΠΌΡ
set_unescape_uri $password_unescape $password_form; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ· ΡΠΎΡΠΌΡ
encrypted_session_expires 2592000; # Π·Π°Π΄Π°ΡΠΌ Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΡΠ΅ΡΡΠΈΠΈ 30 Π΄Π½Π΅ΠΉ (30 * 24 * 60 * 60 = 2592000)
set $username_password "$username_unescape:$password_unescape"; # Π·Π°Π΄Π°ΡΠΌ basic Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
set_encode_base64 $username_password_encode $username_password; # ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ basic Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
set_encrypt_session $auth_encrypt $username_password_encode; # Π·Π°ΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ basic Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
set_encode_base64 $auth_encode $auth_encrypt; # ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ basic Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
add_header Set-Cookie "Auth=$auth_encode; Max-Age=2592000"; # ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ basic Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π² Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΠΊΡΠΊΡ Π½Π° 30 Π΄Π½Π΅ΠΉ (30 * 24 * 60 * 60 = 2592000)
set $arg_request_uri_or_slash $arg_request_uri; # ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
set_if_empty $arg_request_uri_or_slash "/"; # Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π΅ Π·Π°Π΄Π°Π½, ΡΠΎ Π½Π°ΡΠ°Π»ΠΎ
set_unescape_uri $request_uri_unescape $arg_request_uri_or_slash; # ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ
return 303 $request_uri_unescape; # ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π½Π° ΡΠΎΡ
ΡΠ°Π½ΡΠ½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ
}login.html
<html>
<body>
<form method="post">
<input type="hidden" name="csrf" value="<TMPL_var csrf>" />
username: <input type="text" name="username" placeholder="Enter User Name..." /><br />
password: <input type="password" name="password" /><br />
captcha: <img src="/captcha?csrf=<TMPL_var csrf>"/><input type="text" name="captcha" autocomplete="off" /><br />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>Tau qhov twg los: www.hab.com
