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 № 1Rzeczywiś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.