როგორ დავიცვათ თქვენი PHP უკეთესი უსაფრთხოებისთვის

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


როგორ გამკაცრდეს PHP

PHP დღესდღეობით ყველაზე პოპულარულია ვებ – პროგრამირების ენების ყველაზე პოპულარული პროგრამა. დღემდე დასრულდა საიტების 80% უკანა ხედით განახორციელოს PHP. WordPress, Joomla და Drupal მას მხარს უჭერენ. სამწუხაროდ, PHP გახდა პოპულარული სამიზნე ჰაკერების მცდელობებისთვის, რის გამოც მისი კონფიგურაციის უზრუნველყოფა გადამწყვეტია. მიჰყევით ამ მარტივ ნაბიჯებს თქვენი PHP კონფიგურაციის გასაძლიერებლად და დაიცავს მას სისუსტეების დარღვევისგან.

იპოვნეთ PHP კონფიგურაციის ფაილი

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

რედაქტირება გაზიარებული ჰოსტინგით

თუ არ ხართ დარწმუნებული, თუ სად მდებარეობს თქვენი php.ini ფაილი, დაუკავშირდით თქვენს ჰოსტინგის პროვაიდერს. ზოგიერთი პროვაიდერი მოითხოვს, რომ თქვენ განათავსოთ PHP პარამეტრები “.htaccess” ფაილის შიგნით. თუ ეს ასეა, PHP პარამეტრებს უნდა დაემატოს თითო სტრიქონი ფორმატში “php_value სახელის მნიშვნელობა”. გაითვალისწინეთ, რომ თქვენს ჰოსტინგის პროვაიდერმა შეიძლება ხელი შეუშალოს გარკვეული პარამეტრების შეცვლას.

რედაქტირება VPS ან მიძღვნილი სერვერით

ვებ მასპინძელი მენეჯერი (WHM) ამარტივებს PHP კონფიგურაციის ფაილის რედაქტირების პროცესს, მარტივი ინტერფეისით. უბრალოდ იპოვნეთ “სერვისის კონფიგურაცია” განყოფილებაში WHM და დააჭირეთ ღილაკს “PHP კონფიგურაციის რედაქტორი”. გვერდზე, რომელიც გამოჩნდება, აირჩიეთ “Advanced Mode”.

PHP კონფიგურაციის რედაქტორი

თუ თქვენ არ იყენებთ მართვის პანელს, როგორიცაა WHM, თქვენ პირდაპირ უნდა გახსნათ და შეცვალოთ php.ini. Php.ini- ის ადგილმდებარეობა განსხვავდება თქვენი სერვერის ოპერაციული სისტემის საფუძველზე. ბევრი Linux სისტემა აყენებს ფაილს ბილიკზე “/etc/php.ini”. თქვენ შეგიძლიათ დაადასტუროთ მისი ადგილმდებარეობის ბრძანება. დაიწყეთ სერვერზე შესვლის გზით SSH (დაუკავშირდით თქვენს ჰოსტინგის პროვაიდერს ინსტრუქციისთვის). მას შემდეგ რაც შევა, შეიყვანეთ ბრძანება „php –ini“ და დააჭირეთ Enter. მოძებნეთ დაბრუნებული ხაზის სახელწოდება “დატვირთული კონფიგურაციის ფაილი” და გაითვალისწინეთ php.ini ფაილის ბილიკი.

თქვენ შეგიძლიათ გახსნათ და შეცვალოთ php.ini ტექსტური რედაქტორის გამოყენებით, რომელიც გადის ბრძანების სტრიქონში, მაგალითად Linux- ისთვის „ნანო“. უბრალოდ ჩაწერეთ “nano /path/to/php.ini” და დააჭირეთ Enter.
ნანო ლინუქსისთვის

php.ini სტრუქტურა

Php.ini– ს ფარგლებში, თითოეული პარამეტრი განთავსებულია საკუთარ ხაზზე, ფორმატში „პარამეტრი სახელი (პარამეტრი)“. ნებისმიერი სტრიქონი, რომელზეც იწყება ნახევარწრიადი კომენტარი, კომენტარია, ამიტომ არ განაახლეთ რომელიმე სტრიქონი.

კონფიგურაციის პარამეტრების რედაქტირება

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

ნაწილი 1: დისტანციური კავშირები

საშუალებას_ურლ_ფოპენი = 0
დაშვება_url_include = 0

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

ნაწილი 2: Runtime პარამეტრები

max_input_time = 30
max_exception_time = 30

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

memor_limit = 8M

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

Register_globals = გამორთულია

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

expose_php = 0

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

cgi.force_redirect = 1

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

ნაწილი 3: შეყვანის მონაცემთა შეზღუდვები

post_max_size = 256K
max_input_vars = 100

ჰაკერებს შეუძლიათ სცადონ ვებ პროგრამის რესურსების დატბორვა მასობრივი მონაცემების გაგზავნით, რამაც შეიძლება შეამციროს გადაცემის სიჩქარე და სერვერის ხელმისაწვდომი რესურსი. ამ ტიპის შეტევის ეფექტი შეიძლება შემცირდეს POST მონაცემების მაქსიმალური ზომით შემცირებით, ასევე მოთხოვნის მონაცემების რაოდენობის შემცირებით. გაითვალისწინეთ, რომ “post_max_size” ასევე გავლენას ახდენს ფაილების ატვირთვის მაქსიმალურ ზომაზე; თუ თქვენს აპლიკაციას აქვს ფაილის ატვირთვის შესაძლებლობები, დარწმუნდით, რომ ამ პარამეტრის მნიშვნელობა მინიმუმ ისეთივეა, როგორც “upload_max_filesize”..

ნაწილი 4: შეცდომის მართვა

display_errors = 0
display_startup_errors = 0

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

log_errors = 1
error_log = / home / johndoe / error_log

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

ნაწილი 5: ფაილების წვდომის შეზღუდვა

open_basedir = "/ home / johndoe / public_html"

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

open_basedir = "/ home / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / სხდომა"

ნაწილი 6: ფაილების ატვირთვები

file_uploads = 0

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

file_uploads = 1
upload_max_filesize = 1 მ

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

upload_tmp_dir = / var / lib / php / tmp_upload

სტანდარტულად, დროებითი ფაილის ატვირთვები მოთავსებულია დირექტორიაში, რომელიც იწერება სისტემის ყველა მომხმარებლის მიერ. ადგილმდებარეობა უნდა შეიცვალოს უფრო უსაფრთხო დირექტორია. დარწმუნდით, რომ ახალი დირექტორია ადგილმდებარეობა არ არის განთავსებული ვებ – ფესვის შიგნით. თუ იყენებთ ფაილ მენეჯერს, როგორიცაა cPanel– ში შეტანილი პროგრამა, მაშინ ატვირთვის ცნობარის შესაქმნელად მარტივი და უსაფრთხო ადგილმდებარეობა პირდაპირ არის ვებ – ფესვის გარეთ (ე.ი. იგივე დირექტორია, რომელიც public_html მდებარეობს შიგნით). კიდევ ერთი უსაფრთხო ადგილმდებარეობაა PHP დირექტორიის დირექტორიის შექმნა “/ var / lib” -ში. გზა დამოკიდებულია ოპერაციულ სისტემაზე, ანუ ”/ var / lib / php” ან ”/ var / lib / php5”. თუ მოქმედებს open_basedir შეზღუდვები, დარწმუნდით, რომ დროებითი ატვირთვის დირექტორია შედის open_basedir სიაში..

ნაწილი 7: სხდომის უსაფრთხოება

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

session.use_strict_mode = 1

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

session.cookie_httponly = 1

ნება დართეთ სხდომის ქუქი-ფაილების მიღება მხოლოდ HTTP მოთხოვნით და არა სხვა წყაროებიდან, როგორიცაა JavaScript. ეს ხელს უშლის შეტევას, რომელსაც XSS შეტევა ეწოდება.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

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

session.name = custom_session_id

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

session.cookie_secure = 1

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

session.referer_check = მაგალითად.com

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

სხდომა.save_path = "/ var / lib / php / სხდომა"

სხდომის ფაილის შენახვის ბილიკი იწერება სისტემის ყველა მომხმარებლის მიერ. ადგილმდებარეობა უნდა შეიცვალოს უფრო უსაფრთხო დირექტორია. დარწმუნდით, რომ ახალი დირექტორია ადგილმდებარეობა არ არის განთავსებული ვებ – ფესვის შიგნით. თუ თქვენ იყენებთ ფაილ მენეჯერს, როგორიცაა cPanel- ში შეტანილი პროგრამა, მაშინ სესიის დირექტორიის შესაქმნელად მარტივი ადგილი პირდაპირ ვებ – ფესვიდან არის (მაგ. იგივე დირექტორია, რომელიც public_html მდებარეობს შიგნით). კიდევ ერთი უსაფრთხო ადგილმდებარეობაა PHP დირექტორიის დირექტორიის შექმნა “/ var / lib” -ში. გზა დამოკიდებულია ოპერაციულ სისტემაზე, ანუ ”/ var / lib / php” ან ”/ var / lib / php5”. თუ მოქმედებს open_basedir შეზღუდვები, დარწმუნდით, რომ სესიის შენახვის გზა შედის open_basedir სიაში..

session.hash_function = sha512

SHA-512 არის უფრო უსაფრთხო hashing ალგორითმი სესიის პირადობის მოწმობების შესაქმნელად MD5 ჰეშტის ფუნქციასთან შედარებით. ეს ალგორითმი ხელმისაწვდომია PHP ვერსიაში 5.3+. თუ PHP– ს უფრო ნაკლებ ვერსიას აწარმოებთ, ამის ნაცვლად გამოიყენეთ SHA1 ჰაშის ალგორითმი. ამისათვის დააყენეთ “session.hash_function = 1”.

სხდომა.bug_compat_42 = 0
სხდომა.bug_compat_warn = 0

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

გამორთეთ დაუცველი ფუნქციები

disable_functions = ini_set, php_uname, getmyuid, getmypid, passthru, გაჟონვა, მოსმენა, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, high_file, source, show_source, fdxtx posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, POSIX, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo, popen, curl_exec, curl_multi_exec, parse_ini_file, lej_url, lop, lop, lop, lop, lop, lop, lop, lust, lop, lust, lust

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

საპნის ქეში

soap.wsdl_cache_dir = / var / lib / php / soap_cache

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

გადატვირთეთ PHP

მას შემდეგ, რაც php.ini ფაილზე შეიტანთ ცვლილებებს, საჭიროა ვებ სერვერის გადატვირთვა. WHM უზრუნველყოფს ღილაკს ფაილის რედაქტირების შემდეგ სერვერის გადატვირთვისთვის. თუ თქვენ არ იყენებთ მართვის პანელს, როგორიცაა WHM, საჭიროა სერვერის გადატვირთვა ბრძანებითი ხაზის მეშვეობით. Apache– სთვის შეიყვანეთ ბრძანება „sudo apachectl graceful“ და დააჭირეთ Enter- ს.

დასკვნა

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me