Dado ciertos conjuntos de caracteres multibyte, ¿estoy en lo correcto al asumir que lo siguiente no hace lo que estaba destinado a hacer?str_replace() en cadenas multibyte peligroso?
$string = str_replace('"', '\\"', $string);
En particular, si la entrada estaba en un conjunto de caracteres que pueden tener un carácter válido como 0xbf5c, por lo que un atacante puede inyectar 0xbf22 para obtener 0xbf5c22, dejando un carácter válido seguido de una comilla doble sin comillas (") .
¿hay una manera fácil de mitigar este problema, o soy yo la mala interpretación del tema en el primer lugar
(en mi caso, la cadena va en el atributo de valor de una etiqueta HTML de entrada:? eco 'input type = "text" value = "'. $ string. '">';)
EDITAR: para el caso, ¿qué pasa con una función como preg_quote()? No existe un argumento de conjunto de caracteres, por lo que parece totalmente inútil en este escenario. Cuando NO tienes la opción de limitar el juego de caracteres a UTF-8 (sí, eso sería bueno), parece que estás realmente discapacitado. ¿Qué funciones de reemplazo y de cotización están disponibles en ese caso?
Consulte [¿Se puede usar str strplace de forma segura en una cadena codificada en UTF-8 si solo se le asignan cadenas codificadas en UTF-8 como argumentos?] (Http://stackoverflow.com/questions/2652193/can-str-replace- be-safe-used-on-a-utf-8-encoded-string-if-its-only-given-valid) para leer por qué no necesita un mb_str_replace. – Lode