Newsgroup: it.comp.www.php
Titolo: Metodo Get e utenti spiritosi


Ora, da qualche giorno a questa parte, un simpatico utente ha cominciato
a fare una serie di scherzetti. Ad esempio ieri ha totalizzato -3
errori... Credo che lo faccia, dopo aver visto i sorgenti, scrivendo
direttamente l'indirizzo problemi.php?nome='chenneso'&errori='-3' 
o quelchel'č...
Ora, trattasi di una cosa tra amici e non c'č niente in palio, perň non
mi dispiacerebbe fare una bella sorpresina al re degli hackers...
Ho pensato di aggiungere un controllo sull'history (credo che saprei
farlo) per verificare se uno arriva dalla pagina del problemino oppure
no, oppure, nella prima visita alla pagina problemi.php dare un codice
che poi controllo nella seconda visita, ma in entrambi i casi, se lui
entra, si logga, e da lě scrive l'indirizzo mi frega...
Avete qualche idea da suggerirmi? 
Grazie mille in anticipo
 

 Avete qualche idea da suggerirmi? 
Passa le variabili in POST.

 Passa le variabili in POST.
Un po' dura... almeno per le mie (scarse) capacità... la pagina su cui
risolvono è piena di javascript (il visualizzatore dei problemi, che non
ho fatto io...). Attualmente, io, all'interno di una funzione js, scrivo
window.location.href='problemi.php?nome='nomeutente'... etc...
Come posso, sempre in automatico e dentro quella funzione, fargliele
passare in post? È vero, questo è un problema da sottoporre al gruppo di
javascript, ma magari qualcuno una mano me la dà...
Grazie mille, in ogni caso
MC

 Avete qualche idea da suggerirmi? 
Mah...ho dato un'occhiata al sito....ma proprio un'occhiata veloce....e 
non mi piacciono granché alcune cose (sono consigli per migiorare, 
quindi prendili con il giusto spirito):
1) il modo in cui fai inserire il nome (con quel bruttoooo prompt in 
js) :-). Fallo piuttosto con un normalissimo form, e volendo puoi 
"raffinarlo" sempre di più.
2) non ho capito come funzionava il problema di oggi! :-) c'era scritto 
in un campo "while to move"....ma non ho capito assloutamente cosa 
muovere...ho provato qua e là, ma non si muoveva nulla. Magari sarebbe 
meglio se inserissi una breve spiegazione di ciò che bisogna fare.
3) Ho visto che sulla pagina della classifica adesso impedisci errori 
negativi. Ma fino a quando continuerai a usare quel modo, sarà sempre 
troppo facile manometterlo!
Ora, non ho pensato granché ai possibili rimedi, quindi non so anche se 
abbia senso ciò che ti sto dicendo.
Ad esempio, per una buona sicurezza, potresti vedere se riesci a 
spostare la procedura di calcolo errori direttamente sul server. Non ho 
visto in che modo via js tu calcoli gli errori, ma se potessi far 
eseguire quelle istruzioni (ovviamente tradotte in php) direttamente 
sul server, non avresti più problemi riguardo quest'aspetto (forse) 
:-).
A questo potresti aggiungere anche altri piccoli accorgimenti....di cui 
ora non ti parlo nemmeno perché forse non hanno alcun senso (e questa è 
colpa del fatto che mi sono alzato da poco) :-d
ciao,
in bocca al lupo
rob4you

 javascript, ma magari qualcuno una mano me la dà...
Non conosco js ma ho visto (mio malgrado) diversi sorgenti, in linea di 
massima crei una form con uno o più campi hidden secondo il numero di 
variabili che vuoi usare. 
Riempi i campi e invochi un submit() da javascript. I percorsi per 
accedere agli elementi della form non li conosco ma credo ci voglia poco 
a trovarli.
Nella pagina problemi.php invece di accedere le variabili, ad esempio 
quella 'nome', come $_GET['nome']  userai $_POST['nome'] e buonanotte.

 quella 'nome', come $_GET['nome']  userai $_POST['nome'] e buonanotte.
Ed è immediato aggirare anche questo sistema.
rob4you

 Ed è immediato aggirare anche questo sistema.
Non immediato come modificare un GET per l'utente medio.
Proponi una sessione ?

 
Penso fosse proprio quello che intendeva.
Si aggira ancora più facilmente del post: tutti i browser decenti
possono lasciar vuoto il campo "referer" della richiesta http.
E per alcuni (ad esempio, su windows, k-meleon) è proprio banale.
- --
Lorenzo Breda
Query 
keyserver.linux.it
 for GPG Key
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFaCsZNKTWoPUNTGkRAnb9AJ9bZfUaCIoGiQJ76GybbHf8CVs/6ACeO1pM
5CmmVLOkuW98LwKrHaTLYW8=
=nTvN
-----END PGP SIGNATURE-----

 direttamente l'indirizzo problemi.php?nome='chenneso'&errori='-3'
Ciao,
una soluzione č quella di accompagnare i parametri con un ulteriore valore,
che č calcolato come hash degli altri piů una chiave ignota ai tuoi utenti.
Ad es:
nome=pippo&errori=3&h=JDah45fusdah654fidhKJ6435HFKJ5634HSDKfjh
dove h=hash('pippo'+'errori'+'scatrafragno')
dove 'scatrafragno' č una chiave che devi conoscere solo tu.
Nella pagina dei risultati se l'hash non č coerente con il resto
dei parametri l'utente č un furbetto e puoi dirglielo con una
bella echo =)
--
ff

> Proponi una sessione ?
E che ci fai in questo caso con una sessione, la birra? :-)
L'ideale sarebbe come ho già detto spostare la procedura di calcolo 
errori, direttamente sul server, in php.
rob4you

 dove h=hash('pippo'+'errori'+'scatrafragno')
Ma l'hash chi la calcola?
Se la calcola il client, ovviamente la cosa così posta non serve a 
granché.
Se la calcola il server, come fa a sapere in anticipo il numero di 
errori che commetterà l'utente? :-)
Penso che l'uso di qualche forma di cripting potrebbe essere una buona 
idea....andrebbe solo capito come :-D
rob4you

 errori, direttamente sul server, in php.
Non avevo letto il sorgente, non sapevo fosse client side il conto dei 
punti.

 che č calcolato come hash degli altri piů una chiave ignota ai tuoi utenti.
Molto carina questa soluzione :-)

 bella echo =)
Beh sembra un'idea simpatica... Ci provo... Grazie mille
MC
-- 

 rob4you
grazie mille e ciao
MC
-- 

 Ci si conserva una variabile col punteggio.
Ma se il punteggio lo calcoli con js, come lo passi al client per 
memorizzarlo in sessione? :-)
rob4you

 memorizzarlo in sessione? :-)
Si me ne sono reso conto dopo aver inviato l'articolo.
Continua a sfuggirmi quel punto perché non io l'avrei fatto clientside.

io, da autentico newbie :D, risolverei cosi:
per evitare gli errori negativi si controlla la get (nel senso che la
si accetta solo se maggiore o uguale a 0)
per evitare che i piu "furbi" si attribuiscano 0 errori senza passare
per la pagina problemi.php si potrebbe utilizzare $_server[referer] o
passare i dati in post... personalmente non vedo molta difficolta a
sostituire get con post: si tratta solo di combiare qualche parte di
codice seguando un buon manuale o una guida online
mi permetto anche di suggerirti di effettuare un controllo (sui cookie
o sull'ip) per controllare se il visitatore ha risolto il problema
davvero per la prima volta!
Ciao

 passare i dati in post...
Come già detto, passare i dati in post cambia di un epsilon (cioè in 
pratica non cambia nulla) la difficoltà di modificare i dati rispetto 
al get.
rob4you