PHP veb təhlükəsizliyi
Zəifliklər və anlayışlar
Zəiflik Tipləri:
Cross Site Scripting (XSS)
Bu zəiflik veb-səhifələrə yeridilən olmaq üçün məlumata imkan verir. Bu məlumat kod kimi təfsir edilir və effektiv qurbanın brauzerini uzaq idarə etmək kimi görülə bilən tamaşaçının veb-brauzeri ilə yerinə yetirilir.
Cross Site Request Forgery (CSRF)
CSRF qurbanın brauzerinin zəif veb tətbiqinin daxilində əslini təsdiq edilən hərəkəti çağırmağa aldatdığı əməllərin tipinə müraciət edir. Hədəf vebsaytına XSS-ə tez həssas olmaqdan asılı olmayaraq CSRF ilə təsir göstərilə bilər. Təhlükəli necə CSRF bu yolu çağırılan hərəkət növündən və onun təsirindən həqiqətən asılı oluna bilər.
SQL Injection
SQL inyeksiyası hücumları SQL sorğuların manipulyasiyasına gətirir. Əgər müvəffəqiyyətlə istismar etdilərsə , hücum edən verilənlər bazasında bütün məlumata girişi əldə edə bilər.
Insecure Session Handling
Bu kateqoriya sessiya ardıcıl idarə etmək üçün və ya nəzarətə almaq üçün giriş əldə etməyi və ya təsir göstərməyi sessiya simvoluna hücum edənlərə imkan verən problemləri əhatə edir.
Session Fixation
Sessiya qeyd etməsi istifadəçinin sessiyasını idarə etmək üçün hücum edənə imkan verir. Bu həqiqi sessiya simvolu kimi istifadə edilən olmaq üçün məlum simvolu yeritmək ilə edilir.
Information Disclosure
Necə ki ad təklif edir, təhlükəsizlik əlaqəsi oldu ki, informasiya hücum sadələşdirən bilər sistem nəzərdə tutulmuş müddətdə elan edilir. Belə informasiya müxtəlif yerlərdə tapıla bilər, məsələn kod şərhləri, kataloq siyahıları , səhv məlumatları və ya hətta sizin sevimli axtarış sisteminizin axtarış nəticələrində.
Header Injection
Bu zəiflik HTTP cavabına HTTP başlıqlar yeridmək imkanı verir.
File Inclusion
Lokal və ya uzaq faylların daxil edilməsi veb tətbiqinə serverdə əsassız kod icrasına gətirə biləcəy ciddi təhlükəsizlik zəifliyidir.
Insecure Configuration
Serverin və ya tətbiqi proqram təminatının təhlükəli quruluşu hücumları sadələşdirə bilər.
Weak randomness
Bu problem əvvəlcədən proqnazlaşdırıla bilən təsadüfi say nəslinə müraciət edir; məsələn pis seçilən təsadüfi toxumlar və ya kafi olmayan entropiyadan istifadə edən alqoritmlər zəif təsadüfi saylar əmələ gətirmək üçün tanınırlar.
Anlayışlar
Secure Input Handling
Giriş filtrlərindən və validator-dan şəbəkə tətbiqlərində arzuedilməz əks effektləri çağırmaq üçün tanınan müəyyən nümunələr üçün istifadəçi girişini gözdən keçirmək üçün istifadə edilə bilər. İstifadəçi girişi JavaScript-in fraqmentlərini özündə saxlaya bilər, əgər yoxlanılmırsa, onda şəbəkə tətbiqinin konteksti çərçivəsində SQL, PHP və ya başqa kod icrasına gətirə bilər.
Sanitising
Yoxlama funksiyalar istifadəçi giriş məlumatını "bərpa etmək" üçün istifadə edilə bilər, tamamilə potensial olaraq təhlükəli giriş məlumatı rədd etməyin əvəzinə tətbiqin məhdudiyyətlərinə (məsələn müəyyən datatypes, maksimal uzunluq) müvafiq olaraq.
Escaping
Xəlbirləmənin bir neçə müxtəlif növü var:
- Solameylli xətt ön şəkilçisi "\" cərgələr çərçivəsində meta işarəsini müəyyən edir. Məsələn: \t tabulyasiya işarəsidir, \n yeni-sətr işarəsidir... Bu yeni-sətr işarəsi xüsusi məqsədə malik olduğu funksiyalar üçün xüsusi maraqlı ola bilər, məsələn header(). Müntəzəm ifadələr çərçivəsində, solameylli xəttdən xüsusi işarələri xəlbirləmək üçün istifadə edilir, \, və ya \* kimi. rəftar edən müntəzəm ifadələr üçün bütün funksiyalar münasibdi.
- HTML kodlaşdırması HTML kimi onların kodlaşdırılan ekvivalentlərinə veb-brauzer ilə normal olaraq təfsir edilən işarələri tərcümə edir, məsələn < <-dir; və ya < və ya < və > >-dir; və ya > və ya >. HTML kodlaşdırması davranmaq çıxış üçün istifadə edilməlidir, harada ki istifadəçi girişi kodu yeritməksiz HTMLdə əks etdirilməlidir. (htmlentities()-ə baxın)
- URL kodlaşdırması əminlik verir ki, hər işarə uyğun şəkildə RFC 1738-ə müvafiq olaraq URL-lar çərçivəsində kodlaşdırdırılır. Məsələn boş yer işarəsini %20 və < - %3C çevirir. Bu xəlbir URL-lar üçün funksiyalara münasibdir, urlencode() və urldecode() kimi.
White-/Blacklisting
Giriş məlumatını filtrləməyə iki müxtəlif yanaşma var, ağ və qara siyahıda yerləşdirmək. Yoxlamaları qara siyahıda yerləşdirmək "pis nümunələrin" siyahısına qarşı məlumatı daxil etmək olar. Bu yol, arzuedilməz giriş məlumatları imtina edilə bilər və bütün başqa məzmun daha sonra emal edilə bilər. Digər tərəfdən, whitelisting yoxlamaları tanınan "yaxşı nümunələrin" siyahısına qarşı məlumatı daxil etmək olar. Bütün tayı-bərabəri olmayan giriş məlumatı imtina edilə bilər və tək giriş məlumatı tanıdı, necə ki həqiqi qəbul edilə bilər.
Təhlükəsizliklə əlaqələndirilən PHP funksiyaları
Təsdiq etmə və yoxlama funksiyaları
PHP-nüvə funksiyaları
- is_numeric() - Dəyişənlərin rəqəm məzmunlu olduğunu yoxlayır.
- is_array() - Dəyişənlərin silsilə olduğunu yoxlayır.
- strlen() - sətrin uzunluğunu qaytarır.
- strip_tags() - HTML və PHP əlamətlərini (teqlərini) silir.
CType genişlənməsi
Adətən CType genişlənməsi PHP-də aktivdir.
- ctype_alnum() - yalnəz əlifba-rəqəm işarələr - A-Z, a-z, 0-9.
- ctype_alpha() - yalnız əlifba işarələr - A-Z, a-z.
- ctype_cntrl() - yalnız idarəetmə işarələri - tabulyasiya, yeni sətir.
- ctype_digit() - yalnız rəqəm işarələri - 0-9.
- ctype_graph() - yalnız görünən işarələr.
- ctype_lower() - yalnız kiçik hərflər - a-z.
- ctype_print() - yalnız çap olunan işarələr.
- ctype_punct() - yalnız punktuasiya və çap işarələri, rəqəmlər, hərflər və ya boş yer işarəsindən başqa. Məsələn: .!?:;*&$
- ctype_space() - yalnız boş yer işarələri. Məsələn: tabulyasiya, yeni sətir.
- ctype_upper() - yalnız baş hərflər - A-Z.
- ctype_xdigit() - yalnız onaltılıq rəqəmlər işarələri - 0-9, a-f, A-F.
if (!ctype_print($_GET['var'])) {
die("User input contains ". "non-printable characters");
}
?>
Filter genişlənməsi - ext/filter
PHP 5.2.0 virsiyadan başlayaraq, filtr genişlənməsi giriş məlumatın təsdiq və filtrə edilməsi üçün sadə APİ ilə təmin edilmişdir.
- filter_input() - GET, POST, COOKIE, ENV və SERVER qlobal dəyişənləri n məlumatlarını tədbiq olunmuş filtrdən keçirir.
<?php
$url = filter_input(INPUT_GET, 'url', FILTER_URL);
?>
- filter_var() - Filtr dəyişənləri.
<?php
$url = filter_var($var, FILTER_URL);
?>
Filtrlər siyağısı
Təsdiqləmə filtrləri
- FILTER_VALIDATE_INT - tam ədəd ədədi dəyərində giriş məlumatın təsdiqlənməsi.
- FILTER_VALIDATE_BOOLEAN - əgər giriş məlumat bul dəyərdir.
- FILTER_VALIDATE_FLOAT - əgər giriş məlumat üzən vergül sayıdır.
- FILTER_VALIDATE_REGEXP - giriş məlumatın müntəzəm ifadəyə təsdiqlənməsi.
- FILTER_VALIDATE_URL - əgər giriş məlumat URL-dur.
- FILTER_VALIDATE_EMAIL - əgər giriş məlumat həqiqi elektron poçt ünvanıdır.
- FILTER_VALIDATE_IP - əgər giriş məlumat həqiqi İPv4 və ya İPv6 ünvanıdır.