როგორ დავაყენოთ პაროლი html გვერდზე. გვერდზე ვდებთ პაროლს. სპეციალური პროგრამული უზრუნველყოფის გამოყენებით

ძვირფასო მეგობრებო, მოხარული ვარ, რომ კიდევ ერთხელ მოგესალმოთ ჩემს ბლოგზე "". დღეს ვისაუბრებთ იმაზე, თუ როგორ დავაყენოთ პაროლი WordPress ვებსაიტის გვერდზე, აქ ყველაფერი ძალიან მარტივია, მაგრამ რისთვის არის ეს? დღეს ვეცდები გიპასუხო ამ და სხვა კითხვებზე.

რატომ დადეთ პაროლი გვერდზე?

ზოგჯერ საჭიროა საიტის გარკვეულ განყოფილებებზე წვდომის შეზღუდვა; ეს სექციები შეიძლება შეიცავდეს ინფორმაციას პრივილეგირებული მომხმარებლებისთვის (ხშირად პრაქტიკაში), ან ფარულ განყოფილებებზე წვდომა შეიძლება იყოს ფასიანი. საფასურის დარიცხვა შესაძლებელია როგორც ერთხელ, ასევე სააბონენტო გადასახადის სახით, მაგალითად, თვეში ერთხელ. ამ გზით თქვენ შეგიძლიათ შექმნათ უსაფრთხო ვებგვერდი და უზრუნველყოთ ფასიანი წვდომა თქვენს ვიზიტორებზე.

დღესდღეობით ინტერნეტში უამრავი შეთავაზებაა, სადაც შემოთავაზებულია მონაწილეობა მიიღოთ ფასიან ტრენინგში ან შეიძინოთ კურსი საიტების მონეტიზაციის თემაზე გარკვეულ გვერდებზე ფასიანი წვდომით, მაგრამ არ უნდა იყიდოთ ისინი. დიდი ალბათობით, იქ ვერაფერს იპოვით ახალს, მაგრამ ამ სტატიაში გაიგებთ, თუ როგორ დააყენოთ პაროლი ვებსაიტის გვერდზე და როგორ შეცვალოთ იგი, სრულიად უფასოდ.

ვფიქრობ ფასიან წვდომაზე ფულის გამომუშავების პრინციპი ნათელია: დააყენეთ პაროლი, მიიღეთ გადახდა, გაგზავნეთ წვდომის პაროლი. თუ ეს არის სააბონენტო გადასახადი, მაშინ შეცვალეთ პაროლი თვეში ერთხელ, ხელახლა შეაგროვეთ გადახდა და გაგზავნეთ ახალი პაროლი. ეს ყველაფერი შეიძლება ავტომატიზირებული იყოს შესანიშნავი სერვისის e-autopay.com-ის გამოყენებით, ეს სერვისი ძალიან მოსახერხებელია გადახდების მიღებისა და ელექტრონული და ფიზიკური საქონლის ავტომატურად გაგზავნის, PIN კოდების და ა.შ., ყველაფრის კონფიგურაცია შესაძლებელია მოსახერხებელ შვილობილი პროგრამაში. გირჩევთ, ყურადღება მიაქციოთ, სერვისით სარგებლობს ყველა ცნობილი საინფორმაციო ბიზნესმენი, როგორიცაა აზამატ უშანოვი, ალექსანდრე ბორისოვი და მრავალი სხვა. სხვათა შორის, ის ასევე დანერგილია e-autopay.com სერვისზე.

ახლა მოდით გავიგოთ, როგორ დავაყენოთ პაროლი WordPress საიტის გვერდზე. ამისათვის, რა თქმა უნდა, ჯერ უნდა შევქმნათ სასურველი გვერდი, შემდეგ კი გადავიდეთ პოსტის რედაქტირებაზე და გადადით ჩანართზე „გამოქვეყნება“ და დააჭირეთ ბმულს „რედაქტირება“, იხილეთ ფიგურა.

შემდეგ დაინახავთ შემდეგ ფანჯარას, სადაც შეგიძლიათ აირჩიოთ ხილვადობა, საჯარო, პირადი ან პაროლით დაცული, ასევე შეგიძლიათ დაამაგროთ გვერდი მთავარი გვერდის ზედა ნაწილში, მაგრამ გვჭირდება პაროლი, აირჩიეთ სასურველი ფუნქცია და დააყენეთ პაროლი. გვერდისთვის, როგორც ნაჩვენებია ქვემოთ მოცემულ სურათზე.

ყველა ზემოაღნიშნული ნაბიჯის შემდეგ, თქვენ მხოლოდ უნდა გამოაქვეყნოთ გვერდი საჭირო დროს. ამ მარტივი გზით, შეგიძლიათ შექმნათ გვერდები პაროლით თქვენს ბლოგზე და ამით შექმნათ ფასიანი ან შეზღუდული წვდომა სხვადასხვა ინფორმაციაზე. მაგალითად, ჩემს ბლოგზე უფასო კურსზე წვდომა შეზღუდულია, წვდომა შესაძლებელია მხოლოდ ამ კურსის გამოწერის შემდეგ, გამოწერის გააქტიურების შემდეგ, წვდომის პაროლი იგზავნება თქვენს მეილზე, ყველაფერი ძალიან მარტივია და ყველაფერი ავტომატურია. როგორც ხედავთ, ამაში არაფერია რთული; თქვენ შეგიძლიათ დააყენოთ პაროლები თქვენი საიტის ნებისმიერ გვერდზე და სტატიაზე.

ახლა თქვენ იცით, როგორ დააყენოთ პაროლი გვერდზე ან საიტზე არსებულ სტატიაზე. ვიმედოვნებ, რომ ეს ინფორმაცია მოგიტანთ სარგებელს და ახალ იდეებს თქვენს ვებსაიტზე ფულის გამომუშავებისთვის. როგორც ყოველთვის, ველოდები თქვენს კითხვებს და კომენტარებს ამ სტატიაზე.

გადავწყვიტე აღმეწერა საიტის ნაწილის პაროლით დაცვის გზები. თემა რეალურად საკმაოდ დიდია, ამიტომ პირველად შემოვიფარგლები php+mysql ავტორიზაციით.

პირველივე კითხვა, რომელიც ჩვეულებრივ ჩნდება არის ის, თუ როგორ უნდა დახუროთ დირექტორია ადმინისტრაციის სკრიპტებით პაროლით. ამ შემთხვევაში, არ არის საჭირო რაიმე უკუჩვენება - ერთ ან მეტ ადმინისტრატორს აქვს იგივე უფლებები და პიროვნებები იშვიათად იცვლება. ამ სიტუაციაში უმარტივესი გზაა სერვერის სტანდარტული ავტორიზაციის გამოყენება - ჩადეთ .htaccess და .htpasswd ფაილები და ჩაწერეთ საჭირო პარამეტრები. ამაზე უკვე ბევრი დაიწერა, ამიტომ ახალს არაფერს ვიტყვი.

ორ რამეს დავამატებ. პირველი არის სად უნდა განთავსდეს .htpasswd ფაილი. ექსპერიმენტულად გავარკვიე, რომ თუ, მაგალითად, დოკუმენტისკენ მიმავალი გზა შეცდომის გაგზავნით (ErrorDocument) იწერება DocumentRoot სისტემის ცვლადთან მიმართებაში. მაგრამ პაროლის ფაილის (UserFile) გზა იწერება ServerRoot-თან შედარებით. რამდენადაც მე მესმის, ვერ დააყენებთ .htpasswd-ს ServerRoot-ის ზემოთ - "../" არ აღიქმება. ეს ყველაფერი კეთდება იმისთვის, რომ თქვენ შეგიძლიათ განათავსოთ ფაილი პაროლებით, მაგალითად, საიტის root დირექტორიადან ერთი დონის ზემოთ, ისე, რომ ქსელიდან საერთოდ არ იყოს წვდომა ფაილზე.

მეორე არის ის, რომ სკრიპტს შეუძლია გაარკვიოს ვინ ხსნის მას და პაროლი: $PHP_AUTH_USER და $PHP_AUTH_PW ცვლადები.

ამ მეთოდის მთავარი მინუსი არის ის, რომ სერვერს არ შეუძლია დაბლოკოს პაროლის გამოცნობა (შესვლის რამდენიმე წარუმატებელი მცდელობის შემდეგ, მომხმარებელს სთხოვენ დაელოდოს ერთი ან ორი საათი და ამ დროის განმავლობაში მისი IP მისამართიდან ზარები იგნორირებულია). ეს წერია ოფიციალურ Apache დოკუმენტაციაში.

კიდევ ერთი ნაკლი არის პაროლებით ფაილების გადაწერის აუცილებლობა მომხმარებლის წაშლის ან ახლის დანერგვისას. მაგრამ თუ ეს იშვიათად ხდება, ეს მეთოდი საკმაოდ საკმარისია და თქვენ არ მოგიწევთ ფიქრი ავტორიზაციის მექანიზმის დაწერაზე.

ავტორიზაციის ავტომატიზაცია

ეს აუცილებელია არა მხოლოდ მომხმარებელთა დიდ რაოდენობასთან მუშაობის გასამარტივებლად და მათი მაღალი ბრუნვისთვის. თუ გჭირდებათ მომხმარებლის შესახებ დამატებითი ინფორმაციის შენახვა, ან გჭირდებათ უფლებების მოქნილი დიფერენციაცია, უმჯობესია ავტორიზაცია გადაიტანოთ მონაცემთა ბაზაში.

დახურული ტერიტორიის თითოეული გვერდი შეიცავს ფაილს შემდეგი კოდით:

$result = mysql_query(" SELECT * FROM person WHERE login="". preg_replace("/[^w_-]/","",$PHP_AUTH_USER). "" AND pass="". md5($PHP_AUTH_PW). " ""); if (@mysql_num_rows($result)!=1) ( header ("WWW-Authenticate: Basic realm="User area""); header("HTTP/1.0 401 Unauthorized"); print("მომხმარებლის ზონაში შესვლა საიტის, თქვენ უნდა შეიყვანოთ თქვენი მომხმარებლის სახელი და პაროლი."); exit(); ); $user_row = mysql_fetch_array ($ შედეგი);

პირველ სტრიქონში, ყველა სიმბოლო, გარდა ასოების, რიცხვების, ტირეებისა და ქვედა ხაზიდან ამოღებულია შესვლიდან. შემდეგ შემოწმდება მიღებული სტრიქონების რაოდენობა და მხოლოდ იმ შემთხვევაში, თუ ის ერთი რიგია, წვდომა მიენიჭება. სხვა შემთხვევაში, მომხმარებელი დაინახავს ფანჯარას ბრაუზერში, რომელიც მოგთხოვთ შეიყვანოთ შესვლა და პაროლი. თუ მომხმარებელი წარმატებით შევიდა სისტემაში, მის შესახებ ყველა ინფორმაცია გვაქვს $user_row მასივში.

რა თქმა უნდა, ჩემს მოყვანილ მაგალითს არაერთი მნიშვნელოვანი ნაკლი აქვს. არ გადაწეროთ ის ერთი-ერთზე, რათა არ გახდეთ პაროლის გამოცნობის მცდელობის მსხვერპლი, რადგან
1. აქ არ არის დაცვა შერჩევისგან
2. თუ მომხმარებლის ცხრილი დიდია, პაროლის გამოცნობისას თავდამსხმელი დიდი ალბათობით გადატვირთავს მონაცემთა ბაზას

და ბოლო მეთოდი დღეს არის დაშიფრული მონაცემების შენახვა ქუქიებში.

არსებობს შესვლის სკრიპტი, დანარჩენში შედის კოდი, რომელიც საშუალებას გაძლევთ განაგრძოთ მოქმედებები მხოლოდ დახურულ ზონაში - თუ ქუქიების ვადა ამოიწურება ან ის გამოდის იქიდან, თქვენ მოგიწევთ დაბრუნდეთ შესვლის გვერდზე.

შეყვანის სკრიპტი ამოწმებს შესვლას და პაროლს და გამოსცემს ორ ქუქი-ფაილს. პირველში - შესვლა, მომხმარებლის დაუყოვნებლივ იდენტიფიცირების მიზნით (ბაზაში შესვლის ველი, რა თქმა უნდა, უნიკალურია ან თუნდაც გასაღები). მეორე ქუქი შეიცავს შესვლის დროისა და პაროლის ჰეშს (საიდუმლოობისთვის, ამ სტრიქონებს ვამატებ ასო "Y" - მაშინ ჰეშის პოვნა თითქმის შეუძლებელია :).

ყველა სხვა პროგრამა შეიცავს კოდს, რომელიც აკეთებს შემდეგს. აკეთებს მოთხოვნას მონაცემთა ბაზაში - ირჩევს ხაზს მიღებული შესვლით. ამ ხაზიდან ის იღებს „log_time“ ველს და პაროლს და აკეთებს მათგან ჰეშს, როგორც ზემოთ იყო აღწერილი. ადარებს მას მიღებულს, და თუ ისინი ემთხვევა, გამოსცემს ახალ ჰეშის ქუქი-ფაილს, ისევ პაროლიდან, დროიდან და ასო "Y"-დან და აკეთებს შეკითხვას მონაცემთა ბაზაში "განახლეთ მომხმარებლის SET log_time='..." WHERE შესვლა ='$ cookie_login'".

if (isset($HTTP_COOKIE_VARS[$cookie_login]) && isset($HTTP_COOKIE_VARS[$cookie_code])) ($login = $HTTP_COOKIE_VARS[$cookie_login]; $code =$HTTP_COOKIE_quescoult =mydeco; date_format(log_date,"%Y%m%d%H%i%s") როგორც log_date1,pass,uid FROM მომხმარებლის WHERE email="$login" AND log_date>"DATE_SUB(NOW(),INTERVAL 15 MINUTE)"" ); თუ (!mysql_error() && @mysql_num_rows($result)==1) ($log_time0 = დრო(); $log_time1 = თარიღი ("YmdHis", $log_time0); $log_time2 = თარიღი ("Y-m-d H:i :s", $log_time0); $current_user = mysql_fetch_array($result); if (md5($current_user["pass"].$current_user["log_date1"].$md5letter) == $code) ( mysql_query ("განახლება მომხმარებელი SET log_date="$log_time2" WHERE uid=".$current_user["uid"]); setcookie($cookie_code, md5($current_user["pass"].$log_time1.$md5letter), დრო()+900, $site_path);$auth = true; ) else unset($current_user); );

ისევ და ისევ, აქ არ არის დაცვა სერვერზე შერჩევისა და თავდასხმისგან (სხვათა შორის, აქ შეგიძლიათ დაწეროთ მომხმარებლის IP მისამართი ასო "Y" -ის ნაცვლად - ასე რომ, მაგალითად, ოფისის მეზობელს არ შეუძლია მიიღოს ფაილი ქუქი და შედით მისი კომპიუტერიდან).

გვერდის პაროლი. ნაწილი 2. რეკრუტირების ბლოკირება

როცა ეს საკითხი ბოლოჯერ დავპოსტე, ადგილზე დამარტყა და მითხრეს, რომ ასეთმა დაბლოკვამ შეიძლება სერვერი გადაშალოს.

მაგრამ პირველ რიგში, რეაუნტის ბლოკირების შესახებ. ბანალური, მაგრამ მაინც. ათი სიმბოლოს პაროლი, რომელიც შედგება ლათინური ასოებისა და ციფრებისგან, ნიშნავს, რომ არსებობს უამრავი ვარიანტი. თუ თქვენ გამოიცნობთ პაროლს 1,000,000 ჯერ წამში, ამას რამდენიმე ათასი წელი დასჭირდება. მაგრამ იმის გამო, რომ ასეთი gobbledygook ძნელი დასამახსოვრებელია, ჩვენ ხშირად ვქმნით პაროლებს მნიშვნელოვანი სიტყვებისგან. რამდენიმე წლის წინ გაირკვა, რომ პაროლების უმეტესობის გამოცნობა შესაძლებელია 10000 სიტყვიანი ლექსიკონის გამოყენებით. ერთ დროს ქსელში გამოჩნდა ჭია (ასეთი ვირუსი), რომელიც ავიდა Unix სერვერებზე, მათი უსაფრთხოების ხვრელების გამოყენებით და პაროლებს არჩევდა პრივილეგირებული მომხმარებლებისთვის... Unix სისტემის ორთოგრაფიული ლექსიკონის გამოყენებით. არაფრის ტარება არ იყო საჭირო!

თითოეული მომხმარებელი, სანამ არ შეიყვანს სწორ ლოგინს და პაროლს, ითვლება ბოროტ ჰაკერად. რასთან გვაქვს საქმე, როცა მომხმარებელი არასწორად შეაქვს რამეს?
დავიწყება (ამისთვის, ღირსეულ ვებსაიტებს აქვთ „დავიწყებული პაროლი“ ფორმა, რათა გაუგზავნონ იგივე პაროლი სისტემის პარამეტრებში შეყვანილ ელფოსტაზე)
განებივრება ("რადგან არ მაინტერესებს")
პაროლის შერჩევა ლექსიკონის გამოყენებით (წარმატებული შერჩევის ალბათობა დიდია, ამიტომ მისი დახურვა გჭირდებათ, განსაკუთრებით თუ საიტი კომერციული ხასიათისაა)
DoS შეტევა (იმისთვის, რომ არ გადაიტვირთოთ სერვერი, თქვენ უნდა შეამციროთ მოქმედებები, რომლებსაც სკრიპტი შეასრულებს ამ შემთხვევაში)

დიდხანს ვფიქრობდი იმაზე, თუ როგორ შემეძლო სერვერის გადატვირთვა გამომეწვია, თუ დაცვის მექანიზმი ფაილებზეა დაფუძნებული. ადვილი აღმოჩნდა (რამდენი დაჯდება ეს სხვა საკითხია). ასე რომ, დავუშვათ, სერვერი ვერ უმკლავდება ამას, თუ სკრიპტი შეეცდება გახსნას ფაილები ჩასაწერად წამში 1000-ჯერ და ჩაწეროს მათში მონაცემები. ვინაიდან სისტემაში შესვლის 5 წარუმატებელი მცდელობის შემდეგ, მომხმარებელს დაუყოვნებლივ ეკრძალება წვდომა (ფაილში მონაცემების ჩაწერის გარეშე), აუცილებელია 200 უნიკალური IP-ის პოვნა, საიდანაც ხუთჯერ უნდა დაუკავშირდეთ. Შესაძლებელია. ჩვენ ვკიდებთ html ბანერს ხუთი ტეგით ბანერის სკროლერში:

მომხმარებელი მყისიერად აკეთებს ხუთ მოთხოვნას; სერვერი წერს ფაილს ხუთჯერ (სხვათა შორის, ზოგიერთ ბრაუზერში შეიძლება გამოჩნდეს თქვენი შესვლისა და პაროლის შეყვანის ფანჯარა). თქვენ შეგიძლიათ შექმნათ HTML გვერდი ხუთი ასეთი სურათით და თავად ჩასვათ გვერდი iframe-ის მეშვეობით თქვენს მიერ მონახულებულ საიტზე (iframe-ის საშუალებით - ისე, რომ რეფერენტის ველი არ მოიძებნოს. ნაკლებად სავარაუდოა, რომ მხარდაჭერის სერვისი უფასოა. ჰოსტინგი გაუმკლავდება ისეთ საკითხებს, როგორიცაა ჟურნალის ფაილების გათხრა რეფერერების მოსაძებნად). მაგალითები, რაც მე მოვიყვანე, რა თქმა უნდა, შორს არის, მაგრამ ის ფაქტი, რომ სისტემაში ასეთი ხარვეზით შეიძლება ისარგებლოს, დადასტურებულია. სხვათა შორის, მსგავსი რამ უკვე მოხდა.

მაგრამ მე მაინც მოგცემთ ამ მეთოდს - ტყუილად დავწერე, თუ რა? სხვათა შორის, მისი გამოყენება დიდი შიშის გარეშე შეიძლება შეზღუდული რაოდენობის მისამართებისთვის (მაგალითად, კომპანიის ლოკალური ქსელისთვის) დირექტორიაში .htaccess ფაილის განთავსებით შემდეგი შინაარსით:

ბრძანება უარყოფა, ნება
უარყოფს ყველასგან
დაუშვით xxx.xxx.xxx-დან

და აქ არის პროგრამის კოდი:

$ შეცდომები = 0; $fn = "იგნორირება/". preg_replace("[^d.]", "", $REMOTE_ADDR. ".". $HTTP_FORWARDED_FOR); if (is_file($fn)) (if (filectime($fn)< time()-3600) unlink($fn); else $errors = fread(fopen($fn, "r"), 2); }; if ($errors>5) ( print ("წვდომა დახურულია. გთხოვთ დაბრუნდით ერთ საათში."); exit(); ); // აქ მყარდება კავშირი მონაცემთა ბაზის სერვერთან. რათა ტყუილად არ შეეხოს, თუ მომხმარებელი მაშინვე „სცემეს“. $result = mysql_query("SELECT * FROM მომხმარებლის WHERE login="". preg_replace("/[^w_-]/", "", $PHP_AUTH_USER). "" AND pass="". md5($PHP_AUTH_PW). " ""); if (@mysql_num_rows($result)!=1) ( header ("WWW-Authenticate: Basic realm="secret area""); header ("HTTP/1.0 401 Unauthorized"); ბეჭდვა ("საჭიროა ავტორიზაცია"); fwrite (fopen($fn, "w"), ++$errors); exit(); ); $current_user = mysql_fetch_array ($ შედეგი); mysql_free_result($result); თუმცა, ცოდვაა ფაილებთან მუშაობა, თუ არსებობს მონაცემთა ბაზა. Ხუმრობა. წარუმატებელი ავტორიზაციისთვის ჩვენ ვქმნით ცხრილს: CREATE TABLE unauth (მომხმარებლის სახელი VARCHAR(64) NOT NULL, pass VARCHAR(64) NOT NULL, ip VARCHAR(255), შესვლის დრო TIMESTAMP) და ფაილებზე წვდომის ნაცვლად, ჩვენ ვმუშაობთ მონაცემთა ბაზასთან. $errors = @mysql_result(mysql_query("SELECT count(username) as false FROM unauth WHERE logintime>DATE_SUB(NOW(),INTERVAL 1 HOUR) AND ip="$REMOTE_ADDR""),0); თუ (mysql_error()) die(mysql_error()); if ($errors>5) ( print ("წვდომა დახურულია. გთხოვთ დაბრუნდით ერთ საათში."); exit(); ); $result = mysql_query("SELECT * FROM მომხმარებლის WHERE login="". preg_replace("/[^w_-]/", "", $PHP_AUTH_USER). "" AND pass="". md5($PHP_AUTH_PW). " ""); if (@mysql_num_rows($result)!=1) ( header ("WWW-Authenticate: Basic realm="secret area""); header ("HTTP/1.0 401 Unauthorized"); ბეჭდვა ("საჭიროა ავტორიზაცია"); mysql_query ("INSERT INTO unauth (username, pass, ip) VALUES ("$PHP_AUTH_USER", "$PHP_AUTH_PW", "$REMOTE_ADDR $HTTP_X_FORWARDED_FOR")"); გამოსვლა (); ); $current_user = mysql_fetch_array ($ შედეგი); mysql_free_result($result);

სტატისტიკისთვის ძველი ჩანაწერების შენახვა თუ არა, ბიზნეს გადაწყვეტილებაა. თუ რამეა, ისინი შეიძლება წაიშალოს ავტორიზაციამდე შემდეგი მოთხოვნით:

DELETE FROM unauth WHERE შესვლის დრო