/ / PHP str_replace bypass - php, str-replace

PHP str_replace bypass - php, str-replace

Mam obawy dotyczące bezpiecznego korzystania z funkcji str_replace. NA PRZYKŁAD.

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

Czy można ominąć (uzyskać "abcdeefghij" - z 2 literami "e") na przykład przez wielobajtowy zestaw znaków lub znak null?

EDYTOWAĆ: Myślałem o czymś takim: abcd% 6565fghij% 6565 zostałoby zastąpione przez ee, ale str_replace nie działa, ponieważ jest ciągiem wielobajtowym (mb_str_replace).

Odpowiedzi:

2 dla odpowiedzi № 1

Rzeczywiście, jeśli ee nie występuje w łańcuchu dokładnie w ten sposób, co oznacza, że ​​w zgodnym kodowaniu i bez dodatkowych niewidocznych znaków, nie będzie pasować. Jeśli chodzi o zgodne kodowania, ee w twoim kodzie źródłowym jest prawdopodobne ASCII, więc jakikolwiek ASCIIbędzie kompatybilne z kodowaniem (w tym Latin-1, utf-8 i większość kodowań jednobajtowych). Jeśli pomiędzy tymi znakami występują inne znaki / bajty, to oczywiście nie jest to ten sam ciąg znaków i nie można go dopasować. Inne pozornie charakterystyczne postacie oczywiście też nie pasowały.


3 dla odpowiedzi № 2

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

tak, możliwe jest "wstrzyknięcie" znaku "e" poprzez wprowadzenie znaku Unicode, który wygląda lubić e ale jest inny. To niebezpieczeństwo jest zawsze obecne, czego nigdy nie będziesz w stanie wykryć każdy postać, która przypomina "e".

Nie można stwierdzić, czy jest to rzeczywisty problem, ale nie wiadomo, co próbujesz zrobić. Zwykle nie powinno to być istotne z punktu widzenia bezpieczeństwa.