Ho un modulo con una casella di testo che registra i dati su un file php che utilizza la funzione "htmlentities" per rendere sicura l'email al proprietario del sito web.PHP htmlentities non è sufficiente per impedire agli hacker di iniettare codice HTML dal modulo
Il problema è che qualcuno è riuscito a ottenere un collegamento ipertestuale nel testo e htmlentities() non lo rimuove.
Questo è il mio testo HTML:
<input name="usertext" type="text" />
Questo è il mio codice PHP che riceve i dati sul post (ho lasciato il codice email fuori perché non è questo il problema che ho cambiato l'eco solo i dati ricevuti così. potrei provare a replicare quello che l'hacker ha fatto Se so come ha fatto, riesco a trovare un modo per impedire che accada):.
echo trim(htmlentities($_POST["usertext"], ENT_QUOTES));
Ora l'hacker inviano alcuni dati e questo era l'html risultato (il codice sorgente - significa che mostrava un normale collegamento nel browser):
<a target="_blank" href="mailto:[email protected]">[email protected]</a>
Ho pensato che htmlentities() avrebbe sempre impedito a chiunque di immettere html di qualsiasi tipo. Se entro in un collegamento ipertestuale come ad esempio:
<a href="aaa" />
ottengo:
<a href="aaa" />
Ma il testo del hacker non è stato codificato come quello.
Quindi le mie domande sono:
- Come ha fatto l'hacker inserire tag HTML in modo che i htmlentities function() non ha fatto nulla ad esso?
- Come dovrei replicarlo per il test? (potrebbe rispondere alla domanda precedente)
Ho fatto qualche ricerca e potrebbe essere possibile che l'hacker abbia codificato il suo testo in utf-7 o qualcosa del genere?
Ho già ricevuto alcune email con questi stessi collegamenti. Questo hacker sta ovviamente testando il mio sito Web per vedere se può fare XSS o qualcosa del genere.
Registrare la richiesta non elaborata con il contenuto del campo $ _POST ["usertext"] quando inviato. È inoltre possibile aggiungere una codifica a htmlentities che dovrebbe corrispondere alla codifica del contenuto. – MatsLindh
Hai controllato JavaScript incluso da qualche parte, forse è stato creato dinamicamente? – martinstoeckli
Codifica correttamente il contenuto HTML prima dell'invio? – inhan