İlk öncə saytınızdaki qovluqlara 755 fayllara 644 chmod verin
Əgər Server root adminisinizsə onda " /usr/local/Zend/etc/" , " /usr/local/lib/" də php.ini
faylını açaraq redaktə edə bilərsiniz. Aşağıdakı yazılmış Funksiyaları
yerinə yetirdikdən sonra apacheyə restart vermək lazımdır.
Əgər Server admini deyilsinizsə sadəcə serverdən saytınız varsa o zaman public_html daxil olaraq php.ini faylı yaradırın və içinə aşağıda göstərilmiş kodları əlavə (redaktə) edin.
Qeyd: Əgər php.ini faylının yaradılmasında və təhlükəsizlik qaydalarının qurulmasında çətinlik çəkirsinizsə onda php.ini faylını buradan yükləyib FTP-də " public_html" qovluğunun içinə bu faylı atmağınız kifayətdir. Biz artıq bu faylda lazım olan təhlükəsizliyi sizin əvəzinizə qurmuşuq.
Kimsə aşağıda göstərilən bütün əməliyyatı özü etmək istəyirsə onda aşağıda yazılanlara əməl etsin.
İndi keçək " php.ini" quraşdırılmasına:
"disable_functions" (Təhlükəsizlik)
" disable_functions"
ilə serverinizdə bir çox funksiyaların işinə maneə törədə bilərsiniz.
Bunun sayəsində saytınıza inject edilən scriptlərdən və atılımış
shellər üçün təhlükəsizlik qurmuş olursunuz. Bu qədər funksiya çox
görünə bilər amma yaxşı bir təhlükəsizlik üçün şərtdir.
Tövsiyə edilir:
Kod:
disable_functions
= foreach, glob, openbasedir, posix_getpwuid, f_open, system,dl,
array_compare, array_user_key_compare, passthru, cat, exec, popen,
proc_close, proc_get_status, proc_nice, proc_open, escapeshellcmd,
escapeshellarg, show_source, posix_mkfifo, ini_restore, mysql_list_dbs,
get_current_user, getmyuid,pconnect, link, symlink, fin, passthruexec,
fileread, shell_exec, pcntl_exec, ini_alter, parse_ini_file, leak,
apache_child_terminate, chown, posix_kill, posix_setpgid, posix_setsid,
posix_setuid, proc_terminate, syslog, allow_url_fopen, fpassthru,
execute, shell, curl_exec, chgrp, stream_select, passthru,
socket_select, socket_create, socket_create_listen, socket_create_pair,
socket_listen, socket_accept, socket_bind, socket_strerror, pcntl_fork,
pcntl_signal, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited,
pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig,
openlog, apache_get_modules, apache_get_version, apache_getenv,
apache_note, apache_setenv, virtual
Əgər bu qədər funksiyanı bağlamaq istəmirsinizsə o zaman aşağıdaki kimi yazmaq təhlükəsizliyiniz üçün kifayətdir.
Kod:
disable_functions
= glob, posix_getpwuid, array_compare, array_user_key_compare,
ini_restore, exec, proc_get_status, proc_nice, proc_open,
allow_url_fopen, fin, pconnect, system, dl, passthruexec, shell_exec,
proc_close, proc_get_status, chown, chgrp, escapeshellcmd,
escapeshellarg, fileread, passthru, popen,curl_exec, shell, execute
Qeyd: "allow_url_fopen" funksiyasını əgər bağlasanız bu zaman saytınızdan php sonluğu ilə bitən fayllara sorğu etmək olmayacaq. Mələsən: http://big.az/chat/parlaq.php tipli sorğu faylları işləməyəcək. Kimə php sonluqlu fayllara sorğu zamanı skriptin çalışması lazımdırsa bu kodu yuxarıdakı bağlanılan funksiyalar siyahısından çıxartsın.
"safe_mode" (Təhlükəsizlik)
"Safe Mode" adındanda göründüyü kimi "Qorunma Rejimi" deməkdir. "Safe mode" əksər serverlərdə bağlı (off) olduğuna görə serverde istənilən sayta keçid almaq mümkündür. Ona görə Safe mode "on" edirik bu zaman exploitlərin çalışması və əmrlərin execute edilmələrinin qarşısı alınacaq. Bəzi Scriptlər safe_mode = on olanda tam işləmədiyindən server adminləri safe mode yandırmırlar ama bununda çarəsi var. Bunun üçün Serverdə safe mode yandırırıq və hansı sayta safe_mode = off lazımdırsa həmin saytda php.ini faylında safe_mode = off edirik. Bununlada yalnız həmin saytda safe mode söndürürük.
Tövsiyə edilir:
Kod:
safe_mode = on
Yuxarıda yazılanların hamısını etsəniz serverdə shell funksiyaları işləməyəcək.
"register_globals" (Təhlükəsizlik və Performans)
php.ini faylında olan "post" "get" ilə göndərilən sorğulara istifadəçi adlarıyla sorğu edilə bilinib və ya bilinməyəcəyini ifadə edir. Session, cookie funksiyalarını öz adıyla təyin edərək bir dəyişən olmasına səbəb olur. "Off" olaraq nizamlansa bu kimi funksiyalara özünün təyin etdiyi şəkildə istifadə oluna bilinməsinin qarşısı alınır.
Tövsiyə edilir:
Kod:
register_globals = off
Qeyd: Əgər get və post sorğusundan istifadə edirsinizsə bu funksiyanı bağlı saxlamayın.
"allow_url_fopen" (Təhlükəsizlik)
"allow_url_fopen" susmaya görə "açıq" şəklində gəlir və bunun "on"
açıq olması "file_get_contents()", "include()", "require()"
funksiyaları vasitəsi ilə digər faylların da işləməsinə imkan yaradır.
Bu funksiya ilə verilən məlumatlar heç bir nəzarətdən keçirilməzsə
kritik təhlükəsizlik açıqlarına səbəb ola bilər.
Tövsiyə edilir:
Kod:
allow_url_fopen = off
Qeyd: "allow_url_fopen" funksiyasını əgər bağlasanız bu zaman saytınızdan php sonluğu ilə bitən fayllara sorğu etmək olmayacaq. Mələsən: http://big.az/chat/parlaq.php tipli sorğu faylları işləməyəcək. Kimə php sonluqlu fayllara sorğu zamanı skriptin çalışması lazımdırsa allow_url_fopen = on olaraq saxlasın.
"allow_url_include" (Təhlükəsizlik)
Bu dəyişən bağlı edildiyində "require" və "include"
ilə uzaqdan digər bir fayl çağırılmasa maneə törətmiş olacaqsınız.
Bunun sayəsində də böyük bir təhlükədən xilas olmuş olursunuz.
Tövsiyə edilir:
Kod:
allow_url_include = off
"display_errors" (Təhlükəsizlik)
Bu funksiya saytınızın işində meydana gələcək səhvləri əks etdirib əks
etdirməyəcəyini təyin edir. Yəni saytınız üçün deyək bir forum və ya
portal istifadə edirsiniz . Və Bunların çalışması əsnasında "Fatal error: Call to undefined function get_header() en /home/vhosts/site.com/index.php on line 37"
şəklində səhv görünür. Bu səhvlərin görünməsini bağlamaq üçün bu
funksiyanı bağlı vəziyyətdə saxlamaq lazımdır. Çünki bu funksiya pis
niyyətli kəslərin saytınızın serverdə olan tam yolunu göstərmiş olur.
Tövsiyə edilir:
Kod:
display_errors = Off
"cgi.force_redirect" (Təhlükəsizlik)
Bu funksiya normalda "on"
olaraq gəlir və Windows serverlərində IIS, OmniHTTPD kimi yerlərdə
funksiyanın bağlanılması lazımdır. Öz serverinizdə bu funksiya yoxdursa
dəyişdirməyinizə ehtiyac yoxdur.
Tövsiyə edilir:
Kod:
cgi.force_redirect = on
"magic_quotes_gpc" (Təhlükəsizlik və Performans)
Magic Quotes əməliyyatı GET/POST üsuluyla gələn Cookie verilənini avtomatik olaraq PHP scriptə qaçırır.
Tövsiyə edilir:
Kod:
magic_quotes_gpc = on
"magic_quotes_runtime" (Təhlükəsizlik və Performans)
Magic quotes iş müddətində dəyişən meydana gətirir, SQLdən exec()dən, vs.
Tövsiyə edilir:
Kod:
magic_quotes_runtime = on
"magic_quotes_sybase" (Təhlükəsizlik və Performans)
Sybase-style magic quotes istifadə edir (Bunun yerinə ' ' bununla '' qaçırır)
Tövsiyə edilir:
Kod:
magic_quotes_sybase = on
"session.use_trans_sid" (Təhlükəsizlik)
Bu nizamı diqqətli nizamlayın, istifadəçi E-mailə aktiv ID-si olan URL göndərə bilər
Tövsiyə edilir:
Kod:
session.use_trans.sid = off
"open_basedir" (Təhlükəsizlik)
Burada ifadə edilən bir silsilə xaricindəki faylları və ya qovluqları görmək qeyri-mümkündür. Yəni /home/username/public_html/qovluqlar/
saytınızda yalnız faylların görüntülənməsini istəyirsinizsə belə
edilir. Həm faylların həm də şəkillərin olduğu yerin görünməsi üçün
aşağıdakından istifadə olunur /home/vhosts/site.com/public_html/resimler:
/home/username/public_html/fayllar/ bundan kənar yerlərin görünməsi mümkün deyil.
Tövsiyə edilir:
Kod:
open_basedir = "/home/username/public_html/resimler:
/home/username/public_html/fayllar/"
"asp_tags" (Təhlükəsizlik)
ASP Style < % % > teqlərinə icazə verilib verilməyəcəyi təyin edir.
Tövsiyə edilir:
Kod:
asp_tags=Off
"session.hash_function" (Təhlükəsizlik)
Hash Funksiyası
0: MD5 (128 bits)
1: SHA-1 (160 bits)
Tövsiyə edilir:
Kod:
session.hash_function=0
"session.hash_bits_per_character" (Təhlükəsizlik)
Hash çevirərkən hər xarakterdə neçə bit saxlansın
4 bits: 0-9, a-f
5 bits: 0-9, a-v
6 bits: 0-9, a-z, A-Z, "-", ","
Tövsiyə edilir:
Kod:
session.hash_bits_per_character = 5
"expose_php" (Təhlükəsizlik)
"expose_php"
açıqdırsa bağlı edilməsi tövsiyə edilir. Əks halda PHP ilə etdiyiniz
hər şeydə server tərəfindən PHP distributivi kimi məlumatlar
göstəriləcək. Hackerlər hətta Lamerlər bu məlumatları sevərlər. Bunlara
maneə törətmək üçün "off" seçimini seçin.
Tövsiyə edilir:
Kod:
expose_php = Off
"html_errors" (Təhlükəsizlik)
Bu funksiyanın açıq olması vəziyyətində səhv mesajları çıxacaq.
Tövsiyə edilir:
Kod:
html_errors = Off
"max_execution_time" (Təhlükəsizlik)
Bu funksiya Scriptin icra olunmasına təyin olunmuş müddəti göstərir.
Məsələn istifadəçi bir linkə basdı və bu linkin açılması üçün təyin
olunan saniyədən çox zaman keçərsə səhifə saytınızın serverdə olduğu
tam yolu göstərərək səhv verə bilər. Bu səhvlərin görünməsi
təhlükəsizlik baxımından təhlükəlidir. 300 saniyə yazılan yerdə
istədiyiniz zamanı təyin edə bilərsiniz.
Tövsiyə edilir:
Kod:
max_execution_time = 300
"max_input_time" (Təhlükəsizlik)
Scriptin təyin edilən sorğunu icra etməsi üçün keçən maksimum zamanı göstərir.
Tövsiyə edilir:
Kod:
max_input_time = 300
"ServerSignature" (Təhlükəsizlik və Performans)
"ServerSignature"
saytınızda tapılmayan bir faylın baxılması vəziyyətində bu səhifənin
altında serverlə əlaqədar bir məlumat alır və bu da performansı
azaldır. Bununlada pis niyyətli kəslər serverlə əlaqədar məlumatı
öyrənmiş olarlar.
Tövsiyə edilir:
Kod:
ServerSignature = Off
"UseCanonicalName" (Performans)
Bu nizamın açıq olması Apache self-referencing URL meydana gətirdiyində
Server adı və portdan ibarət yaranan bir ad istifadə edir.
Tövsiyə edilir:
Kod:
UseCanonicalName = Off
"HostnameLookups" (Performans)
"HostnameLookups"
açıq olması performansın düşməsinə səbəb olur. IP ünvanı DNS
serverindən baxılaraq öyrənilə bilər buda performansı aşağı salır.
Tövsiyə edilir:
Kod:
HostnameLookups = Off
"ExtendedStatus" (Performans)
Serverin vəziyyətini öyrənmək üçün server-status istifadə edilirsə
Apache hər an bu prosessorun çağrıla biləcəyini gözlədiyi üçün hazır
gözləyir və hər an sistem saatını öyrənməsi lazım olur bu da
performansı aşağı salır.
Tövsiyə edilir:
Kod:
ExtendedStatus = Off
"register_long_arrays" (Təhlükəsizlik və Performans)
Bu funksiyanın "on" açıq olması vəziyyətində sisteminizdə hər script
işləməyəcək install və s. etməkdə səhvlərlə qarşılaşa bilərsiniz amma
yaxşı bir təhlükəsizlik və performans üçün "off" vəziyyətində
saxlanılması gərəkdir.
Tövsiyə edilir:
Kod:
register_long_arrays = Off
"allow_call_time_pass_reference" (Performans)
Funksiyaların çağrılması zamanı yaranan uyğunsuzluqlarla əlaqədar xəbərdarlıq verir.
Tövsiyə edilir:
Kod:
allow_call_time_pass_reference = Off
"enable_dl" (Təhlükəsizlik)
Bu funksiyanın "off" bağlı olması lazımdır. Əks halda pis niyyətli
insanların sistemin php modullarında iş görməsinə imkan yaradır və
sistemdə rahat gəzmələrini təmin edir. Təhlükəsizlik üçün bağlı olması
lazımdır.
Tövsiyə edilir:
Kod:
enable_dll = Off
"track_errors" (Təhlükəsizlik və Performans)
Sürücülərdə meydana gələn səhvlərdə səlahiyyət verildiyi təqdirdə səhv mesajı errormsg olaraq dəyişəndə göstərilir.
Tövsiyə edilir:
Kod:
track_errors = Off
"file_uploads" (Təhlükəsizlik)
Açıq olarsa serverdə fayl yüklənməsinə icazə verilmiş olacaq və bu da
ciddi bir təhlükəsizlik açığına səbəb olur. Əgər istifadə etdiyiniz
scriptdə hər hansı bir fayl yüklənilməsindən istifadə etmirsinizə bu
funksiyanı mütləq bağlı vəziyyətə gətirin. Bunun sayəsində saytınızı
böyük bir təhlükədən shell, script inject və s. zərərli yükləmələrdən
qoruya bilərsiniz.
Tövsiyə edilir:
Kod:
file_uploads = Off
"ignore_repeated_errors" (Təhlükəsizlik və Performans)
Açıq olsa təkrarlanan səhvləri loglamaz.
Tövsiyə edilir:
Kod:
ignore_repeated_errors = Off
"ignore_repeated_source" (Təhlükəsizlik və Performans)
Bu nizam açıq olduğunda təkrar səhvlər loglanmayacaqdır.
Tövsiyə edilir:
Kod:
ignore_repeated_source = Off
"display_startup_errors" (Təhlükəsizlik və Performans)
"display_errors"
funksiyası "on" açıq olsa belə, PHP-nin iş əsnasında meydana gələn
səhvlər görünməyəcəkdir. Bu funksiyanın "off" bağlı vəziyyətə
gətirilməsi tövsiyə edilir.
Tövsiyə edilir:
Kod:
display_startup_errors = Off
"safe_mode_gid" (Təhlükəsizlik)
UID - GID idarələrini yalnız UID ilə etməsinə icazə verər. Beləcə eyni
qrupda olan fayllar tapılsa belə görünə bilməzlər. Yəni serverdə
tapılan digər müştərilərin scriptlərini və s. görmələrinə maneə törədir.
Tövsiyə edilir:
Kod:
safe_mode_gid = Off
"output_buffering = 4096" (Performans)
Tövsiyə edilir:
Kod:
output_buffering = 4096
"register_argc_argv" (Performans)
Bağlı olsa gərəksiz ARGV və ARGC qeydlərini önləyir. PHP nin ARGV və ARGC dəyişənlərini bildirib bildirməməsini izah edir.
Tövsiyə edilir:
Kod:
register_argc_argv = Off
"php_value session.use_trans_sid - php_value session.use_only_cookies"
Bu şəkildə nizamlanması URL-daki PHPSESSID məlumatlarının oxunmasını aradan qaldırır.
Tövsiyə edilir:
Kod:
php_value session.use_trans_sid = 0
php_value session.use_only_cookies = 1
"session.auto_start"
Session başlatmasını başlanğıcda istəmək
Tövsiyə edilir:
Kod:
session.auto_start = 0
"session.cookie_lifetime"
Cookienin zaman nizamı
Tövsiyə edilir:
Kod:
session.cookie_lifetime = 0
"memory_limit"
Scriptin istifadə etdiyi maksimum əməli yaddaş (RAM) miqdarı
Tövsiyə edilir:
Kod:
memory_limit = 8M
"post_max_size"
PHP-nin qəbul edə biləcəyi maksimum POST sorğu ölçüsü
Tövsiyə edilir:
Kod:
post_max_size = 256K
"upload_max_filesize"
Serverə upload (yüklənilən) faylların maksimum ölçüsü
Tövsiyə edilir:
Kod:
upload_max_filesize = 256K
"upload_tmp_dir"
Temporary qovluğuna HTTPdən gələn fayllar, nizamlanmazsa default qovluğu istifadə ediləcək.
Tövsiyə edilir:
Kod:
upload_tmp_dir = /var/www/foo.bar/sessions
Üstdə yazdığım kodları "php.ini" faylınıza alt alta əlavə edə bilərsiniz.
İndi isə keçək sql injeksiya və xss açıqlarına ən asand yolu htacces kontroludu public_html qovluğumuzda olan .htaccess faylımızı notepad-la açırıq və içərisinə aşağıda kodları əlavə edirik.
404.shtml əvəzinə yönləndiriləcəyi adresi yaza bilərsiniz
Kod:
RewriteEngine on
RewriteCond %{QUERY_STRING} ("|%22).*(>|%3E|<|%3C).* [NC]
RewriteRule ^(.*)$ 404.shtml [NC]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC]
RewriteRule ^(.*)$ 404.shtml [NC]
RewriteCond %{QUERY_STRING} (;|'|"|%22).*(union|insert|where|select|update|drop|md5|or|and|if).* [NC]
RewriteRule ^(.*)$ 404.shtml [NC]
RewriteRule (,|;|<|>|'|`) 404.shtml [NC]
|