Neden Metin sterilize mb_convert_encoding diyorsun?

1 Cevap php

Bu this (excellent) answer referans bulunmaktadır. O, PHP giriş kaçmak için en iyi çözüm html_entities ardından mb_convert_encoding aramak olduğunu belirtir.

Ama tam olarak neden (UTF8) ve parametreleri ile aynı mb_convert_encoding çağırır?

Özgün yanıt alıntı:

HTML etiketleri dışında htmlspecialchars ($ string) kullansanız bile, hala çok bayt charset saldırı vektörleri açıktır.

Eğer olabilir en etkili şöyle mb_convert_encoding ve htmlentities bir arada kullanmaktır.

$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
$str = htmlentities($str, ENT_QUOTES, 'UTF-8');

Bu Kaçırdığım yarar çeşit var mı?

1 Cevap

Tüm ikili veri geçerli UTF8 olduğunu. / Den kodlamalarına ile aynı mb_convert_encoding çağırarak bu bir verilen kodlama için doğru kodlanmış bir dize ile ilgili sağlamak için basit bir yoludur.

UTF8 doğrulama ihmal yararlanabilmesi için bir yolu, Bölüm 6 (güvenlik konuları) açıklanan rfc2279:

Another example might be a parser which prohibits the octet sequence 2F 2E 2E 2F ("/../"), yet permits the illegal octet sequence 2F C0 AE 2E 2F.

Bu daha kolay bir ikili temsil incelenmesiyle anlaşılabilir:

110xxxxx 10xxxxxx # header bits used by the encoding
11000000 10101110 # C0 AE
         00101110 #    2E the '.' character

Başka bir deyişle: (C0 AE - header-bits) == '.'

Alıntılanan metni işaret ettiği gibi, C0 AE geçerli UTF8 sekizli dizisi değildir, yani mb_convert_encoding dizeden kaldırılır (veya '.', ya da başka bir şeye tercüme olurdu: - .)