/ / PHP str_replace bypass - php, str-replace

PHP str_replace bypass - php, str-replace

Eu tenho preocupações sobre o uso seguro da função str_replace. POR EXEMPLO.

$var = "abcdeefghij";
$var = str_replace("ee", "", $var); // Should be "abcdfghij"

É possível ignorar (get "abcdeefghij" - com 2 "e" letras) isso por charset multibyte ou caractere nulo por exemplo?

EDITAR: Eu estava pensando em algo assim: abcd% 6565fghij% 6565 seria substituído por ee mas str_replace não funcionaria porque é uma string multibyte (mb_str_replace).

Respostas:

2 para resposta № 1

De fato, se ee não ocorre na string exatamente dessa maneira, o que significa que, em uma codificação compatível e sem caracteres invisíveis adicionais, ela não "corresponde". No que diz respeito às codificações compatíveis, ee em seu código-fonte é provável ASCII, então qualquer ASCIIcodificação compatível fará (incl. Latin-1, utf-8 e a maioria das codificações de byte único). Se houver outros caracteres / bytes no meio, obviamente não é a mesma string e não irá corresponder. Outros personagens parecidos obviamente não serão compatíveis.


3 para resposta № 2

¿Sıɥʇ ǝʞı ן uɐǝɯ no⅄

sim, pode ser possível "injetar" um caractere "e" inserindo um caractere Unicode que parece gostar e mas é diferente. Esse perigo está sempre lá, qualquer um que você nunca poderá detectar qualquer personagem que se assemelha "e".

É impossível dizer se isso é um problema real, embora sem saber o que você está tentando fazer. Normalmente, isso não deve ser relevante para a segurança. Talvez fornecer um pouco mais de fundo?