finalmente qualcuno che spiega.
Cmq il pericolo esiste da autenticati altrimenti non succede nulla, vi babba un cookie o altre amenità inutili visto che non autenticati avete gli stessi suoi privilegi.
E' buono per diffondere malware che riguarda il browser...
E' buona norma non navigare mentre si è autenticati su siti "importanti" come paypal, admin del vostro joomla, piuttosto che ebay etc.
E' buona norma dopo un'autenticazione a un sito importante eliminare i dati in memoria del browser
grazie alex
EDIT: in pratica cosa succede...
if (isset($_REQUEST['lang'])) {
-------------------------------------------------------
guarda se nella request esiste la lingua; lo si fa perchè altrimenti se uso la variabile senza che questa sia settata ottengo un errore
if ('de' == $_REQUEST['lang'] || 'en' == $_REQUEST['lang']) $lang = $_REQUEST['lang'];
---------------------------------------------------------------------------------------------------------------------------------
poi usa un condizionale in forma contratta su una riga perchè gli interessa dare un valore a lang solo se la lang è de o en
$add .= '<input type="hidden" name="lang" value="'.$_REQUEST['lang'].'" />'."\n";
-----------------------------------------------------------------------------------------------------------------
e qui arriva il problema... ovvero, uno script malevolo infilato in $REQUEST[lang] non avrebbe potuto funzionare prima poichè è usata solo per comparazione == , ...non è uguale e ritorna un false ma non esegue nulla.
Invece inserendola in $add va ad occupare un posto nell'html della pagina, in particolare un campo hidden del form prendendo direttamente la var dalla request senza preoccuparsi di cosa contenga.
come sanitizzare? basta non mettere $REQUEST['lang'] nel value ma una variabile valorizzata con un casting di $REQUEST['lang'] e una "scappatoia" nel caso il casting fallisse.
Chessò da una regex che filtri solo i caratteri a-z ad un semplice count della lunghezza della stringa che credo non superi i tre caratteri oppure costruire un array di comparazione con tutte le lingue, o usare qualche metodo di joomla per vedere se la lingua esiste ed è attiva....
Secondo me è meglio cercare di individuare se la stringa è errata che non il suo filtraggio che può comunque non esistere e creare errori
}
... poi c'è quel phpself del form...