Mam formularz z polem tekstowym, które umieszcza dane w pliku php, który korzysta z funkcji "htmlentities", aby bezpiecznie wysłać wiadomość e-mail do właściciela witryny.Utwory PHP nie wystarczą, aby powstrzymać hakerów przed wstrzykiwaniem html z formularza
Problem polega na tym, że ktoś zdołał uzyskać hiperłącze w tekście, a htmlentities() go nie usuwa.
To mój tekstowe html:
<input name="usertext" type="text" />
To jest mój kod PHP, który odbiera dane post (wyszedłem kod e-mail, bo to nie jest problem zmieniłem to tylko echo odebranych danych, tak. mógłbym spróbować powtórzyć co haker zrobił Jeśli wiem, jak on to zrobił, mogę znaleźć sposób, aby zatrzymać jej dzieje).
echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
teraz haker wysłać jakieś dane i to był html wynik (kod źródłowy - oznacza to, że pokazał normalny link w przeglądarce):
<a target="_blank" href="mailto:[email protected]">[email protected]</a>
Pomyślałem, że htmlentities() zawsze powstrzyma kogokolwiek przed wejściem do wszelkiego rodzaju html. Jeśli wejdę hiperłącze, takie jak:
<a href="aaa" />
uzyskać:
<a href="aaa" />
Ale tekst hakera nie został zakodowany tak.
Więc moje pytania to:
- Jak haker wpisać tagi html tak, że htmlentities function() nie zrobił nic do niego?
- Jak mogę skopiować to do testowania? (odpowiedź na powyższe pytanie):
Zrobiłem trochę badań i możliwe, że haker zakodował swój tekst w utf-7 czy coś w tym stylu?
Otrzymałem już kilka e-maili z tymi samymi linkami. Ten haker oczywiście testuje moją stronę, żeby sprawdzić, czy może zrobić XSS czy coś.
Po wysłaniu wyślij surowe żądanie z zawartością pola $ _POST ["usertext"]. Możesz również dodać kodowanie do htmlentities, które powinny pasować do kodowania treści. – MatsLindh
Czy sprawdziłeś gdzieś dołączony JavaScript, może jest on tworzony dynamicznie? – martinstoeckli
Czy poprawnie kodujesz zawartość HTML przed wysłaniem? – inhan