Gdrcd 5.1 - Piccolo difetto di Chat e Mappe
Gdrcd 5.1 - Piccolo difetto di Chat e Mappe postato il 14/03/2013 18:02:51 nel forum programmazione, open source e hosting
Salve a tutti!
Smanettando un po' con le mappe e con le chat, ho notato un piccolo difetto.
Modificando l'url sulla barra degli indirizzi, è possibile fare in modo che, pur risultando presenti su una data mappa, si possa "spiare" una chat di un'altra mappa.
Faccio un esempio: mettiamo caso che voglia spiare la chat "Piazza" che si trova sulla mappa "Mappa principale" facendo in modo che io risulti su un'altra mappa chiamata "Mappa secondaria".
Per fare ciò, basta agire sull'id della mappa e della chat dell'url della chat "Piazza", che sarebbe più o meno così:
http://www.land.it/main.php?dir=2&map_id=1
Il numero 2 indica la chat, ed il numero 1 indica la mappa.
Bene, sostituendo quell'url con questo:
http://www.land.it/main.php?dir=2&map_id=2
Nella lista dei presenti risulterò sulla "Mappa secondaria", ma posso visualizzare l'intera conversazione senza che gli altri lo scoprano.
Come si potrebbe correggere questo difetto, impedendo possibili spiate?
Pagine → 1
14/03/2013 19:36:53
eheh. GDRCD è strutturato ovunque per poter usare questi escamotage.
Il fatto è che non bisognerebbe mai passare due parametri collegati tra di loro. Se un parametro può essere ricavato conoscendo l'altro basta metterne uno solo e ricavare l'altro con una query. In questo modo ti risparmi il mal di testa di dover validare DUE input invece che uno, anzi a quanto pare gdrcd non ne valida nemmeno uno.
Leva il map_id, e usa dir per ricavare il map_id dal database. Oppure puoi tenerli entrambi, ma DEVI sempre controllare che il map_id fornito sia coerente con il dir fornito controllando nel database.
15/03/2013 00:34:43
Grazie leoblacksoul, ottimi suggerimenti. Proverò a risolvere questo problema togliendo il map_id.
Ma se oltre ad eliminare ogni riferimento a map_id, eliminassi dal database la tabella mappa_click e modificassi la pagina mappaclick.inc.php riducendola ad una lista di chat, farei una cavolata?
15/03/2013 19:51:55
cicciokr ha scritto: non devi eliminare il map_id semplicemente modifica l'header.ini.php
c'è una sezione con degli if che fa l'update sulla tabella personaggio per dire in che luogo è o se è in una mappa...
poi il file presenti è sempre dalla tabella personaggio che si basa.
Grazie anche a te Cicciokr. Ho trovato questa sezione di cui parli, ma quegli if riguardano solo l'aggiornamento (il primo if agisce quando il personaggio si trova in mappa, il secondo if quando il personaggio si trova in una chat).
Ho provato anche a fare un controllo per evitare che possa essere visualizzata la chat se sono presenti il valore della chat e della mappa assieme, ma non ottengo alcun risultato.
Il controllo che ho aggiunto è questo:
if ((isset($_REQUEST['dir']) && is_numeric($_REQUEST['dir'])) && (isset($_REQUEST['map_id']) && is_numeric($_REQUEST['map_id'])))
{
$_SESSION['luogo'] = -1;
$_SESSION['mappa'] = $_REQUEST['map_id'];
}
16/03/2013 18:58:06
Se hai tempo di aspettare fino a lunedì/martedì riscrivo il file al fine di fixare il bug.
16/03/2013 19:34:49
Ancora grazie a tutti per gli aiuti e le dritte, ma ancora non ho capito bene come creare questo controllo.
Proprio poco fa sono riuscito a scrivere un controllo funzionante in header.inc.php, cioè questo:
if (((isset($_REQUEST['dir']))&(isset($_REQUEST['map_id']))) && is_numeric($_REQUEST['dir']) && is_numeric($_REQUEST['map_id']))
{
$_SESSION['luogo'] = -1;
$_SESSION['mappa'] = $_REQUEST['map_id'];
}
Ma questo controllo non impedisce la possibilità di visualizzare chat non corrispondenti all'id della mappa. Fa solo in modo che se uno aggiorna la pagina quando ci si trova su un link che contiene sia l'id della mappa che quello dello stato, viene riportato alla pagina della mappa (come avviene quando si preme il tasto aggiorna e non ci si trova in una chat).
18/03/2013 01:48:49
Il redirect! Ecco cosa mancava!
Aggiungendo il redirect al controllo che ho fatto prima, funziona: se un furbetto inserisce nella barra degli indirizzi contemporaneamente un id della chat ed un id della mappa, si viene dirottati all'id della mappa.
if (((isset($_REQUEST['dir']))&(isset($_REQUEST['map_id']))) && is_numeric($_REQUEST['dir']) && is_numeric($_REQUEST['map_id']))
{
$_SESSION['luogo'] = -1;
$_SESSION['mappa'] = $_REQUEST['map_id'];
header("Location: main.php?dir=-1");
}
L'aggiunta di questo codice comporta una correzione nel file della lista dei presenti, perché lì i link delle chat comprendono sia l'id della chat che l'id della mappa.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Foundation Galactic Frontier ↗
CRSED: F.O.A.D. ↗
New Orleans ↗
Raja Dunia ↗
Tibia ↗
Exclusive Villa GdR ↗
Fallen Gods ↗