Sono preoccupato per l'uso sicuro della funzione str_replace
. PER ESEMPIO.
$var = "abcdeefghij";
$var = str_replace("ee", "", $var); // Should be "abcdfghij"
È possibile bypassare (ottenere "abcdeefghij" - con 2 "e" lettere), ad esempio con charset multibyte o carattere null?
MODIFICARE: Stavo pensando a qualcosa di simile: abcd% 6565fghij% 6565 sarebbe stato sostituito da ee ma str_replace
non funzionerebbe perché è una stringa multibyte (mb_str_replace
).
risposte:
2 per risposta № 1In effetti, se ee
non si verifica nella stringa esattamente in questo modo, il che significa che in una codifica compatibile e senza caratteri invisibili aggiuntivi, non ha corrispondenza. Per quanto riguarda le codifiche compatibili, ee
nel tuo codice sorgente è probabile ASCII, quindi qualsiasi ASCIIla codifica compatibile funzionerà (incluse le letture Latin-1, utf-8 e maggior parte dei byte singoli). Se ci sono altri caratteri / byte nel mezzo, ovviamente non è la stessa stringa e non combacia. Ovviamente anche altri personaggi simili non hanno eguagliato.
3 per risposta № 2
¿Sıɥʇ ǝʞı ן uɐǝɯ no⅄
sì, potrebbe essere possibile "iniettare" un carattere "e" inserendo un carattere Unicode sembra piace e
ma è diverso. Quel pericolo è sempre lì, nessuno potrebbe mai essere in grado di rilevare qualunque personaggio che assomiglia a "e".
E 'impossibile dire se questo è un problema reale, anche se non sai cosa stai cercando di fare. Di solito, questo non dovrebbe essere rilevante per la sicurezza. Forse fornire qualche background in più?