Məlumatlar filterdən keçir, amma HTML teqlərindən istifadə edə bilmirəm

Salam, deməli saytda bazaya gedən məlumatları yox, bazadan gələn məlumatları htmlentities($data, ENT_QUOTES | ENT_HTML5, ‘UTF-8’) ilə filterdən keçirib, ekranda çap edirəm. Bəzən elə olur ki, html teqlətindən istifadə etmək lazım gəlir. Məsələn müəyyən uzunluğu keçəndə, arasına
teqi qoyamaq lazım gəlir. Ya da ki, mətn daxilində link, emoji və s. varsa onda onları teqlə əvəzləmək lazım gəlir. (a href=”” img src=”” və s.) Filterdən keçirtdiyim üçün bunu html kodu kimi yox adi mətn kimi çap edir. (‘Salam img src=”smiley.png”‘) Belə bir variantla problemi həll etmək olar: str_replace(“<br>”, ”
“, $data) , amma bir şey var ki, əgər istifadəçi göndərən mətndə elə
teqi olsa (yəni misal üçün kiməsə
teqi haqqında mesaj göndərsə) bu str_replace() metodu ilə əvəzləndiyi üçün adi mətn kimi yox html teqi kimi ekrana çıxacaq. Yəni XSS boşluğu yaranacaq.


Yadda saxlama
Kateqoriya: Sual . , , . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (5 cavab var)

(17:24, 23/10/2016 ) #65622

Belə bir alternativ tapdım, daha doğrusu WordPress-in kodlarına baxarkən gördüm :). Deməli, verilənlər bazasına məlumat filterlənib göndərilir və ordan məlumat çəkiləndə artıq məlumatı filterdən keçirmədən ekranada çap edilir. Bu təhlükəsizlik baxımından nə dərəcədə düzgündür?

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(19:12, 23/10/2016 ) #65624

Salam. Dediyiniz çox ümumi təsvirdir, bu işlərin çox xüsusi halları var və hamısı üçün eyni qayda keçərli deyil. Məsləhət görərdim ki, “WordPress – Validating user data” axtarıb rəsmi saytdan tam oxuyasınız bu mövzunu.
escape başqa məntiqdir, validate başqa, sanitize başqa. Esc çıxışda işlədilir, (məsələn esc_html html teqlərə mane olur, esc_attr html atribut formatına salır data-nı, yəni qoymur ki data html atributu korlasın (class=”” )
və.s.
Bazaya məlumat daxil olanda isə Sanitize adlanır. Yəni burada escape və ya php-nin htmlentities, addslashes filan istifadə edilməməlidir. Həm input həm output üçün WordPress-in öz funksiyaları yetərlidir.

Şərh olaraq yazdığınız hal isə xüsusi haldır, bəzən hansısa məlumat saxlanılarkən onun filtersiz istifadəsi normal ola bilər. Yenə deyirəm, bu duruma bağlıdır, bu məsələlərin ümumi qaydası yoxdur. Bəzən saxlanılacaq data ədəddirsə sadəcə (int) funksiyası bəs edə bilər, bütün filter funksiyalarının yerinə təkcə o.

Tam məlumat burada.
Ümumi yanaşmanız isə doğrudur: “Never trust user input” yanaşması.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (10:08, 25/10/2016 ) #65638

    Yox, mən hər hansısa CMS istifadə etmirəm. Kodları özüm yazıram, yəni deməyim odur ki, mən istifadəçidən alınan məlumatları htmlentites metoduyla bazaya yazdırıram.(<b>) Bazadan məkəndə isə heç bir əlavə əməliyyat aparmıram. Yəni, bu təhlükəsizdir mi?

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (10:58, 25/10/2016 ) #65639

      Bazadan çəkəndən sonra nə edirsiz bəs? Təzədən decode edib dərc edirsiz hardasa? O halda entities-in mənası nə oldu? Sadəcə mysql-də saxlamaqmı? Axı entities-in mysql ilə əlaqəsi yoxdur.
      Mysql tərəfi qorumaq üçün mysqli-nin öz prepare metodundan istifadə etməniz lazımdır.
      html ilə bağlı qorumalar üçün, XSS filan məsələlərinə görə isə yaxşı olar ki fərdi yanaşma ilə qurasınız məntiqi. Məsələn strip_tags edib icazəli teqləri saxlayıb qalanları strip edə bilərsizniz bazadan oxuyarkən və ya yazmadan öncə. (məsələn script teqini filter etmək olar).
      Sıfırdan düşünməkdənsə hazır class-lar da götürə bilərsiniz github-dan. Lazımi açar sözləri daxil edin, balaca hazır class-lar götürün githubdan. Hansı ki həm girişi həm çıxışı filterləyə bilir lazımi formada.

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (21:10, 25/10/2016 ) #65650

      Misal üçün istifadəçi b teqini yazır. Mən onu htmlentities() ilə “&”lt;b”&”gt; halına gətirib yazıram bazaya. Ordan çəkəndə isə adi print ilə çap elətdirirəm.

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Bu suala aid öz sualım var:
Sual verin
Bu suala cavab vermək istəyirəm:
Cavab verin

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

Software Developer cavab verdi - Rus dilindən mətni tərcümə etmək (3 saat əvvəl)

Cənab cavab verdi - Almanca söz bazası yığmaq (3 gün əvvəl)

rdrobert cavab verdi - Mikrofon süngərinə yazı (4 gün əvvəl)

rdrobert cavab verdi - Yerli virtual olaraq dost tapmaq platforması (4 gün əvvəl)

rdrobert cavab verdi - Almanca söz bazası yığmaq (4 gün əvvəl)

rdrobert cavab verdi - Playstation 4 almaq, Playsation klub açmaq (4 gün əvvəl)

rdrobert cavab verdi - Proqramistin ixtsasi hansidir? (4 gün əvvəl)

Software Developer cavab verdi - Azercell Kabinetim aplikasiyasında İstəSən tarifi haqqında (5 gün əvvəl)

Software Developer cavab verdi - Proqramistin ixtsasi hansidir? (5 gün əvvəl)

byshako cavab verdi - Google Azərbaycan nömrələrini qəbul etmir (15 gün əvvəl)

rdrobert cavab verdi - Honeygain, passiv gelir (17 gün əvvəl)

rdrobert cavab verdi - Xaricdən telefon getirmek (17 gün əvvəl)

rdrobert cavab verdi - Google Azərbaycan nömrələrini qəbul etmir (17 gün əvvəl)

rdrobert cavab verdi - AliExpress, Telefon, Rüsum (17 gün əvvəl)

MiMov cavab verdi - Özəl ip tv qurmaq (25 gün əvvəl)

Software Developer - 615 xal

E. Hacı - 607 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 434 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 23234 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2024