XÜSUSİ RABİTƏ VƏ İNFORMASİYA
TƏHLÜKƏSİZLİYİ DÖVLƏT XİDMƏTİ

KOMPÜTER İNSİDENTLƏRİNƏ QARŞI MÜBARİZƏ MƏRKƏZİ

İnsident bildir

Məqalələr > PHP veb təhlükəsizliyi

12 Mart 2011

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:

  1. 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.
  2. 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 < &lt-dir; və ya &#x003C; və ya &#60; və > &gt-dir; və ya &#x003E; və ya &#62;. 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)
  3. 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.
<?php
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.