Dato determinati set di caratteri multibyte, ho ragione nel ritenere che quanto segue non faccia ciò che era destinato a fare?str_replace() sulle stringhe multibyte pericoloso?
$string = str_replace('"', '\\"', $string);
In particolare, se l'ingresso era in un set di caratteri che potrebbe avere un carattere valido come 0xbf5c, quindi un attaccante può iniettare 0xbf22 per ottenere 0xbf5c22, lasciando un carattere valido seguito da un doppio apice non quotate (") .
c'è un modo semplice per attenuare questo problema, o sono io incomprensione problema, in primo luogo
(nel mio caso, la stringa sta andando in l'attributo value di un tag input HTML:? echo 'input type = "text" value = "'. $ string. '">';)
MODIFICA: Del resto, che dire di una funzione come preg_quote()? Non c'è alcun argomento per questo, quindi sembra totalmente inutile in questo scenario. Quando NON hai l'opzione di limitare il set di caratteri a UTF-8 (sì, sarebbe bello), sembra che tu sia davvero handicappato. Quali funzioni di sostituzione e quotatura sono disponibili in questo caso?
Vedere [È possibile utilizzare str_replace in modo sicuro su una stringa con codifica UTF-8 se ha come argomento solo le stringhe con codifica UTF-8 valida?] (Http://stackoverflow.com/questions/2652193/can-str-replace- be-safe-used-on-a-utf-8-encoded-string-if-its-only-given-valid) per leggere il motivo per cui non è necessario un mb_str_replace. – Lode