Bazı çok baytlı karakter kümeleri verildiğinde, aşağıdakilerin yapmak istediği şeyi yapmadığını varsayarak düzeltebilir miyim? Özelliklestr_replace() tehlikeli midir?
$string = str_replace('"', '\\"', $string);
, giriş 0xbf5c gibi geçerli bir karaktere sahip olabilecek bir karakter kümesinde, bu yüzden bir saldırganın bir tırnaksız çift tırnak ardından geçerli bir karakter bırakarak 0xbf5c22 almak için 0xbf22 enjekte eğer (") .
bu sorunu hafifletmek için kolay bir yol var mı, yoksa (benim durumumda, dize bir HTML girdi etiketinin değeri özniteliği girecek ilk etapta sorunu yanlış anlama am:? yankı 'giriş türü = "metin" değeri = "'. $ dize. '">';)DÜZENLEME: Bu konuda, preg_quote() gibi bir işlevden ne haber? Bunun için bir karakter argümanı yok, bu yüzden bu senaryoda tamamen işe yaramaz gibi görünüyor. UTF-8 karakter kümesini sınırlandırma seçeneğiniz olmadığında (evet, bu güzel olurdu), gerçekten engelli gibi görünüyorsunuz. Bu durumda ne değiştirme ve alıntılama işlevleri mevcut?
Bkz. [Yalnızca argümanlar olarak geçerli UTF-8 kodlanmış dizeleri verildiğinde str_replace UTF-8 kodlu dizede güvenle kullanılabilir mi?] (Http://stackoverflow.com/questions/2652193/can-str-replace- mb_str_replace'a neden ihtiyaç duyulmadığını okumak için güvenli bir şekilde kullanılan-on-a-utf-8-kodlanmış-dizgi-sadece-verilen-geçerli-geçerli). – Lode