Ինչպես խնամել ձեր PHP- ն `ավելի լավ անվտանգության համար

PHP- ն լայն տարածում ունի շատ կայքերի շրջանում & դիմումները, բայց դրանք պետք է խստացվեն անվտանգության համար: Ահա մի քանի առաջադեմ խորհուրդ ՝ ձեր PHP կազմաձևման ֆայլն ապահովելու համար.


Ինչպես խստացնել PHP- ն

PHP- ն առայժմ ամենատարածված վեբ back-end ծրագրավորման լեզուն է, որն այսօր օգտագործվում է: Մինչ օրս ավարտվեց Ենթածրագիր ունեցող կայքերի 80% -ը իրականացնել PHP: WordPress- ը, Joomla- ն և Drupal- ը դրան բոլորից են աջակցում: Դժբախտաբար, PHP- ն դարձել է հակերության փորձերի հայտնի թիրախ, այդ իսկ պատճառով դրա կազմաձևման ապահովումը կարևոր է: Հետևեք այս պարզ քայլերին `ձեր PHP կազմաձևը կարծրացնելու և այն պաշտպանելու համար խոցելի խոցելիություններից.

Տեղադրեք PHP կազմաձևման ֆայլը

PHP- ի կազմաձևման ֆայլի անունը php.ini է, որը դուք պետք է խմբագրեք: Ֆայլի գտնվելու վայրը տարբերվում է `կախված ձեր հոստինգի ընկերության և սերվերի տեսակից.

Խմբագրել համօգտագործված հոստինգով

Եթե ​​վստահ չեք, թե որտեղ է գտնվում ձեր php.ini ֆայլը, դիմեք ձեր հոստինգի մատակարարին: Որոշ պրովայդերներ պահանջում են, որ PHP- ի պարամետրերը տեղադրեք «.htaccess» ֆայլի մեջ ոստայնի մեջ: Եթե ​​դա այդպես է, PHP- ի պարամետրերը պետք է ավելացվեն մեկ տողից մեկ ՝ «php_value Name արժեք» ձևաչափով: Հիշեք, որ ձեր հոստինգի մատակարարը կարող է կանխել որոշակի պարամետրերի փոփոխումը.

Խմբագրել VPS կամ Նվիրաբեր սերվերի հետ

Վեբ հոստի մենեջերը (WHM) պարզեցնում է PHP կազմաձևման ֆայլը խմբագրելու գործընթացը `ապահովելով պարզ ինտերֆեյս: Պարզապես գտեք «Ծառայության կազմաձևումը» բաժինը WHM- ում և կտտացրեք «PHP- ի կազմաձևման խմբագիր»: Էջում, որը երևում է, ընտրեք «Ընդլայնված ռեժիմ».

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.
Nano- ը Linux- ի համար

php.ini կառուցվածքը

Php.ini- ի ներսում յուրաքանչյուր պարամետր տեղադրվում է իր սեփական տողի վրա `” Setname = setvalue “ձևաչափով: Եզրագծով սկսվող ցանկացած տող մեկնաբանություն է, ուստի մի՛ թարմացրեք այդ տողերից որևէ մեկը.

Խմբագրել կազմաձևման պարամետրերը

Ստորև բերված է այն պարամետրերի ցանկ, որոնք պետք է վերանայվեն և թարմացվեն ՝ անվտանգությունը բարելավելու համար: Պարամետրերը խմբավորված են ներքևում գտնվող մի քանի բաժիններում ՝ իրենց նպատակների հիման վրա.

Բաժին 1. Հեռակապի միացումներ

թույլտվություն_ուրլ_ֆոպեն = 0
թույլտվություն_ուրլ_ինջել = 0

Թույլ մի տվեք, որ բացված ծածկոցները բացեն հեռավոր URL- ները: Հեռակա բովանդակությանը միշտ չէ, որ կարելի է վստահել. Այս ընտրանքների անջատումը ապահովում է, որ փաթաթված ծածկոցները կարող են բեռնել միայն տեղական բովանդակությունը.

Բաժին 2. Runtime- ի կարգավորումները

max_input_time = 30
max_exception_time = 30

Սահմանափակեք մուտքագրման համար թույլատրված առավելագույն ժամանակը, ինչպես նաև առավելագույն ժամանակը, որը կարող է գործարկել PHP սցենարը: Այստեղ երկու պարամետրերը դրված են 30 վայրկյան սահմանի վրա: Սա ապահովում է, որ սցենարը վնասազերծելու դեպքում այն ​​չի կարդա մուտքագրումներ կամ գործադրի ավելի երկար ժամանակահատված: Լավ կոդավորված սցենարը չպետք է պահանջի ավելի քան 30 վայրկյան.

memor_limit = 8M

Համոզվեք, որ PHP սցենարը երբեք չի օգտագործում ավելի քան 8MB հիշողություն: Եթե ​​սցենարը վնասազերծված է, ապա այս պարամետրը արդյունավետորեն սահմանափակում է այն հիշողությունը, որը կարող է օգտագործել սցենարը.

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» – ը նույնպես ազդում է ֆայլերի բեռնումների առավելագույն չափի վրա. եթե ձեր դիմումը ֆայլերի բեռնման հնարավորություններ ունի, համոզվեք, որ այս կարգաբերման արժեքը առնվազն նույնքան մեծ է, որքան «վերբեռնեք_մաքս_ֆայլերը».

Բաժին 4. Սխալների գործարկում

display_errors = 0
display_startup_errors = 0

Սխալային հաղորդագրությունները երբեք չպետք է ցուցադրվեն վերջնական օգտագործողին, քանի որ հաղորդագրությունները հաճախ պարունակում են մանրամասն տեղեկություններ `դիմումի ծածկագրի և սերվերի վերաբերյալ: Այս տեղեկատվությունը կարող է օգտագործվել հաքերներին օգնելու համար: Փոխարենը, սխալի հաղորդագրությունները մուտքագրեք սերվերի անվտանգ ֆայլ.

log_errors = 1
error_log = / home / johndoe / error_log

PHP- ի սխալները պետք է մուտքագրվեն ՝ դիմումի ծածկագիրը կարգաբերելու, ինչպես նաև հնարավոր խոցելիությունների ուսումնասիրման համար: Եթե ​​դուք օգտագործում եք ֆայլերի կառավարիչ, ինչպիսին է cPanel- ով ներառվածը, սխալի տեղեկանքի համար հարմար և անվտանգ տեղակայությունն ուղղակիորեն դուրս է ցանցի արմատից:.

Բաժին 5. Սահմանափակել ֆայլերի հասանելիությունը

open_basedir = "/ տուն / johndoe / public_html"

Open_basedir- ն ապահովում է, որ PHP- ն կարող է ներառել ֆայլեր միայն նշված դիրեկտորիաներից: Սա բարելավում է անվտանգությունը `թույլ չտալով, որ PHP սցենարները ակամայից մուտք գործեն անվտանգ ֆայլեր սպիտակեցված ուղիներից դուրս: Ուշադրություն դարձրեք, որ դուք պետք է ավելացնեք այն բոլոր գրացուցակները, որոնք անհրաժեշտ է PHP- ին մուտք գործել սպիտակ ցուցակի ցուցակ ՝ ներառյալ ֆայլերի ժամանակավոր բեռնման և նստաշրջանի դիրեկտորիաները (տես ստորև): Կարող եք ցուցակին ավելացնել բազմաթիվ դիրեկտորիաներ `յուրաքանչյուր գրացուցակի միջև տեղադրելով աղիք: Օրինակ:

open_basedir = "/ տուն / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / նստաշրջան"

Բաժին 6: Ֆայլերի վերբեռնումներ

file_uploads = 0

Եթե ​​ձեր դիմումը չի պարունակում ֆունկցիոնալ ֆայլեր օգտագործողների համակարգիչներից վերբեռնելու համար, խորհուրդ է տրվում ընդհանրապես անջատել PHP- ի այս հնարավորությունը: Սա օգնում է կանխել հակերներին սցենարների վերբեռնումը, որոնք այնուհետև կարող են ներարկվել հայտի մեջ.

file_uploads = 1
upload_max_filesize = 1M

Եթե ​​ձեր դիմումը պահանջում է ֆայլի բեռնման հնարավորություններ, պահեք «upload_max_filesize» հնարավորինս փոքր արժեքի.

upload_tmp_dir = / var / lib / php / tmp_upload

Լռելյայն, ֆայլերի ժամանակավոր վերբեռնումները տեղադրվում են գրացուցակում, որը գրելի է համակարգի բոլոր օգտագործողների կողմից: Տեղանքը պետք է տեղափոխվի ավելի անվտանգ գրացուցակ: Համոզվեք, որ գրացուցակի նոր վայրը տեղակայված չէ ոստայնի արմատում: Եթե ​​դուք օգտագործում եք ֆայլերի կառավարիչ, ինչպիսին է cPanel- ով ընդգրկվածը, ապա բեռնման գրացուցակը ստեղծելու հեշտ և անվտանգ տեղակայումը ուղղակիորեն գտնվում է վեբ արմատից դուրս (այսինքն ՝ այն նույն գրացուցակը, որը գտնվում է public_html- ում): Մեկ այլ անվտանգ վայր ՝ «/ var / lib» – ում PHP գրացուցակում գրացուցակի ստեղծումն է: Ուղին կախված է գործառնական համակարգից, այսինքն ՝ «/ var / lib / php» կամ «/ var / lib / php5»: Եթե ​​առկա են open_baseir- ի սահմանափակումներ, համոզվեք, որ ժամանակավոր բեռնման գրացուցակը ներառված է open_basedir սպիտակ ցուցակի մեջ:.

Բաժին 7. Նիստերի անվտանգություն

Նիստերը օգտագործվում են անհատական ​​օգտագործողների համար բազմաթիվ խնդրանքների ընթացքում տեղեկատվության պահպանման համար: Իրական տեղեկատվությունը պահվում է սերվերում, իսկ օգտագործողների վավերացման համար օգտագործվում է նստաշրջանի ID պարունակող cookie (կամ, ավելի քիչ անվտանգ ՝ HTTP հարցման տվյալներ): Նիստերը օգտագործվում են այն նպատակների համար, ներառյալ վեբ դիմումի վավերացումը, ինչն է պատճառը, որ դրա անվտանգությունն այդքան կարևոր է: Հետևյալ պարամետրերը կարող են թարմացվել `օգնելով նվազեցնել նստաշրջանի ընդհատման ռիսկը.

session.use_strict_mode = 1

Ստեղծեք նոր նստաշրջանի ID, եթե զննարկիչը ուղարկում է նախկինում չմիացված ID: Սա օգնում է կանխել հարձակումը, որը կոչվում է նստաշրջանի ամրագրում.

session.cookie_httponly = 1

Թույլ տվեք, որ նիստի cookie- ն հասանելի լինի միայն HTTP խնդրանքով, և ոչ թե JavaScript- ի այլ աղբյուրներից: Սա օգնում է կանխել հարձակումը, որը կոչվում է XSS գրոհ.

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

Պահպանեք նստաշրջանի ID- ն cookie- ում, այլ ոչ թե այն ուղարկելով որպես URL պարամետր: Սա օգնում է ապահով պահել օգտվողի նիստը `կանխելով նիստերի ամրագրման գրոհները.

session.name = custom_session_id

Տեղեկանիշները պահում են իրենց տեղեկատվությունը առանցքային արժեքի ձևաչափով: Խորհուրդ է տրվում թարմացնել cookie- ի լռելյայն հիմնական անունը, որը պահում է նստաշրջանի ID- ն: Թարմացրեք «custom_session_id» – ը `անհատական ​​արժեքով.

session.cookie_secure = 1

Եթե ​​ձեր վեբ հավելվածն ապահովված է HTTPS- ի արձանագրության վրա `ապահովելու համար, միացրեք այս կարգավորումը` ստիպել, որ նիստերի ID- ներ պարունակող բլիթները հասանելի լինեն միայն անվտանգ կապի միջոցով:.

session.referer_check = օրինակ.com

Ստուգեք, թե որտեղից է եկել հարցումը `պարզելու, թե արդյոք թույլ կտա մուտք գործել նիստի տվյալները: Թարմացրեք այս պարամետրային արժեքը ձեր ծրագրի տիրույթի անունով ՝ կանխելու համար նիստի տեղեկատվությունը, եթե սցենարը բեռնված է արտաքին աղբյուրից.

session.save_path = "/ var / lib / php / նստաշրջան"

Նիստերի նախնական ֆայլը պահելու ուղին գրվում է համակարգի բոլոր օգտագործողների կողմից: Տեղանքը պետք է տեղափոխվի ավելի անվտանգ գրացուցակ: Համոզվեք, որ գրացուցակի նոր վայրը տեղակայված չէ ոստայնի արմատում: Եթե ​​դուք օգտագործում եք ֆայլերի կառավարիչ, ինչպիսին է cPanel- ով ընդգրկվածը, ապա նիստի գրացուցակը ստեղծելու դյուրին գտնվելու վայրը ուղղակիորեն գտնվում է վեբ արմատից դուրս (այսինքն ՝ նույն գրացուցակը, որը public_html- ն է գտնվում): Մեկ այլ անվտանգ վայր ՝ «/ var / lib» – ում PHP գրացուցակում գրացուցակի ստեղծումն է: Ուղին կախված է գործող համակարգից, այսինքն ՝ «/ var / lib / php» կամ «/ var / lib / php5»: Եթե ​​առկա են open_baseir- ի սահմանափակումներ, համոզվեք, որ նիստի պահպանման ուղին ներառված է open_basedir սպիտակ ցուցակի մեջ:.

session.hash_function = sha512

SHA-512- ը ավելի անվտանգ հեշինգի ալգորիթմ է ՝ նստաշրջանի նույնականացման համար ստեղծելու համար, համեմատած MD5 լռելյայն ֆունկցիայի հետ: Այս ալգորիթմը հասանելի է PHP- ի 5.3+ տարբերակում: Եթե ​​PHP- ի ավելի փոքր տարբերակ եք վարում, փոխարենը օգտագործեք SHA1 հեշ ալգորիթմը: Դա անելու համար սահմանեք «session.hash_function = 1».

նստաշրջան.bug_compat_42 = 0
session.bug_compat_warn = 0

Այս պարամետրերը անջատելը կապահովի, որ նստաշրջանի փոփոխականները հնարավոր չէ ամբողջությամբ նախաստորագրել, ինչը բարելավում է անվտանգությունը.

Անջատեք խոցելի գործառույթները

disable_functions = ini_set, php_uname, getmyuid, getmypid, passthru, leak, listen, discfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, high_file, source, show_source, fdix 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, Պոպենին, curl_exec, curl_multi_exec, parse_ini_file, allow_url_fopen, allow_url_include, pcntl_exec, chgrp, chmod, chown, lchgrp, lchown, PUTENV

PHP- ի մի քանի գործառույթներ կարող են ապահովել դռների բաց դռներ վեբ հավելվածների հակերների համար, եթե դրանք ուշադիր օգտագործվեն: Օրինակ ՝ այդ գործառույթներից ոչ պատշաճ վավերացված մուտքագրումներ ուղարկելը բերում է անվտանգության հետ կապված խնդիրների: Այս գործառույթները ընդհանրապես անջատելը խնդրի պարզ և արդյունավետ լուծում է: Այնուամենայնիվ, եթե ձեր դիմումը պահանջում է թվարկված որևէ գործառույթ, ապա հանեք այն ցուցակից.

Օճառի քեշ

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

Ինչ վերաբերում է ֆայլերի վերբեռնումներին և նստաշրջանի տվյալներին, SOAP քեշի տվյալները չպետք է պահվեն լռելյայն ժամանակավոր գրացուցակում: Սահմանեք սա ավելի անվտանգ գրացուցակի մեջ.

Վերագործարկեք PHP- ն

Php.ini ֆայլում փոփոխություններ կատարելուց հետո ձեզ հարկավոր է վերագործարկել վեբ սերվերը: WHM- ն ֆայլը խմբագրելուց հետո սերվերը վերագործարկելու կոճակ է տրամադրում: Եթե ​​WHM- ի նման կառավարման վահանակ չեք օգտագործում, ապա ձեզ հարկավոր է վերսկսել ձեր սերվերը հրամանի տողի միջոցով: Apache- ի համար մուտքագրեք «sudo apachectl նազելի» հրամանը և սեղմեք Enter.

Եզրակացություն

Այս պարամետրերը թարմացնելով ՝ ձեր PHP միջավայրը հետագայում նաև պաշտպանվելու է հակեր փորձերից: Ձեր PHP միջավայրը հակերներից ապահովելը կարևոր քայլ է ձեր բիզնեսի հեղինակությունը պաշտպանելու համար: Հիշեք, որ վատ կոդավորված հավելվածը միշտ բաց դռներ է հաքերների համար, նույնիսկ PHP- ի կոշտ կազմաձևով: Սկսեք ձեր կազմաձևը կարծրացնելով, և այնտեղից միշտ գրեք դիմումների անվտանգ ծածկագիր.

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