рдЕрдирдПрдХреНрдЬрд╝рд┐рдореЗрдВрдЯреЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд_рд▓рд┐рдВрдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рд╕рдВрд╕реНрдХрд░рдг 0.8.50 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, Nginx Secure_link рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬрд╛рд▓рд╕рд╛рдЬреА рд╕реЗ рд▓рд┐рдВрдХ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рд╣реИред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЕрднреА рднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ [ 1 ]ред рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╡рд┐рд╡рд░рдг Nginx рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ [ 2 ] рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ Sysoyev рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ [ 3 ]ред рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рд┐рдВрдХ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PHP рдХреЛрдб рдирдЧреАрдирдХреНрд╕ рдлреЛрд░рдо [ 4 ] рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд╡рд╛рдЪрд╛рд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

nginx.conf:
 рд╕реНрдерд╛рди ~ ^ / p / ((? <рд╕реБрд░рдХреНрд╖рд┐рдд> [\ w -] +, \ d +) / ((? <рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдЯрд╕реНрдЯрдлрд╝>ред) $ {ред
      safe_link $ рд╕реБрд░рдХреНрд╖рд┐рдд; 
      # рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, '$ рд╕реБрд░рдХреНрд╖рд┐рдд' = "рдПрдЪрдПрдПрд╕рдПрдЪ, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк"
      safe_link_md5 PASSWORD $ safe_link_expires $ рд╕реБрд░рдХреНрд╖рд┐рдд_рд╕реНрдЯрдлрд╝;
      # # $ safe_link_expires 'рдПрдХ nginx рдЪрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ' safe_link '= TIMESTAMP рд╕реЗ рджрд╢рдорд▓рд╡ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ

      рдЕрдЧрд░ ($ Secure_link = "") {403 рд╡рд╛рдкрд╕реА рдХрд░реЗрдВ;  } # рдЕрд╡реИрдз рд▓рд┐рдВрдХ
      рдЕрдЧрд░ ($ Secure_link == 0) {рд╡рд╛рдкрд╕реА 410;  } # рдПрдХреНрд╕рдкрд╛рдпрд░реНрдб рд▓рд┐рдВрдХ
     
      # рд▓рд┐рдВрдХ рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдХрд░реЛ
 }


URL рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: / p / HASH, TIMESTAMP / рдХреБрдЫ рднреА рдЬрд╣рд╛рдВ
PASSWORD рдЧреБрдкреНрдд рдкрд╛рд╕рд╡рд░реНрдб
TIMESTAMP рд╡рд╣ рд╕рдордп рд╣реИ рдЬрдм рддрдХ рдпреВрдирд┐рдХреНрд╕ рдпреБрдЧ рдореЗрдВ рд▓рд┐рдВрдХ рд╡реИрдз рд╣реИ
рдХреБрдЫ рднреА рдордирдорд╛рдирд╛ рдкрд╛рда
рдмреЗрд╕64- URL [ 5 ] рдореЗрдВ md5 рд╣реИрд╢ рд╕реБрд░рдХреНрд╖рд┐рдд_рд▓рд┐рдВрдХ_рдПрдордбреА 5 рдЯреЗрдВрдкрд▓реЗрдЯ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреБрдЫ рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ) рд╕реЗ рдПрдЪрдПрд╕рдПрдЪ рдПрдирдХреЛрдбреЗрдб рд╣реИред Base64 рдХреЗ рдмрд╛рдж рд╡рд░реНрдг = 'рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

Mgin5 рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдореЗрдВ Nginx рдХреЗ рдХреБрдЫ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВ:
1. URL рд╕реЗ рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ ($ рд╕реБрд░рдХреНрд╖рд┐рдд_рд╕реНрдЯрдл) рдореВрд▓ рд░реВрдк рдореЗрдВ URL рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
2. рдмреЗрд╕ 5 рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП md5 рд╣реИрд╢ рдХреЛ рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

PHP рдХреЗ рд▓рд┐рдП рдХреЛрдб рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
$time = time() + EXPIRE_TTL; # = TIMESTAMP $hash = md5(PASSWORD.$time.$secured_stuff, true); $hash = strtr( base64_encode($hash), array( '+' => '-', '/' => '_', '=' => '' )); $url = 'http://example.tld/p/$hash.','.$time.'/'.$secured_stuff; 


рдЖрдк рд╣реИрд╢ рдФрд░ рдЯрд╛рдЗрдо рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдФрд░ рдХреБрдХреАрдЬрд╝ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
URL рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП
  http://example.com/p/files/top_secret.pdf?st=PIrEk4JX5gJPTGmvqJG41g&e=1324527723 

рдЬрд╣рд╛рдВ рд╕реЗрдВрдЯ PASSWORD, URI рдФрд░ рддрд░реНрдХ рдИ рд╕реЗ рдПрдХ рд╣реИрд╢ рд╣реИ
рд╕реНрдерд╛рди рджреЗрдЦреЗрдВ
 
 рд╕реНрдерд╛рди / рдкреА / {
      safe_link $ arg_st, $ arg_e;  # рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд URI рднрд╛рдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП 
      safe_link_md5 PASSWORD $ uri $ arg_e;  # PASSWORD рдЧреБрдкреНрдд рдЯреЛрдХрди рд╣реИ
      ....
 }

рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реИрд╢ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрджрд░реНрдн:
[рез] sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html
[реи] wiki.nginx.org/HttpSecureLinkModule
[рей] nginx.org/pipermail/nginx/2010-Seture/022324.html
[рек] forum.nginx.org/read.php?21 , резреиремрейремрей,резреи forumрейреирек # рд╕рдВрджреЗрд╢ -резреи forumрейреирек
[рел] en.wikipedia.org/wiki/Base64#URL_applications

Source: https://habr.com/ru/post/In120907/


All Articles