Problem znany, lecz zabezpieczenie trudniejsze. Jest jeszcze jedno rozwiązanie:
<form method="POST" class="rate">
Potem wystarczy przypisać style do przycisków i nałożyć tło, czyli gwiazdki. Jest 1 problem - między przyciskami występuje 1 spacja, gdyż każdy <button> w kodzie znajduje się w osobnej linijce dla lepszej czytelności.
Chociaż pomysł z kluczem jest ciekawy. Tylko gdzie go trzymać? W zmiennej sesji? Zagrożenie związane z GET powinno zmniejszyć się. Chociaż nie... Złośliwy użytkownik umieści na obcym forum "obrazek" o URL = towar.php?id=X, a później URL = glosuj.php?id=X i po sprawie. Pierwsze żądanie spowoduje przypisanie kodu do zmiennej sesyjnej, a drugie zagłosuje na określony towar.
Na razie najlepszą ochroną jest dobrze wykorzystany REFERER. Może jeszcze coś pominąłem.
W przypadku POST można jeszcze inaczej zabezpieczyć formularz. Zapisać kod do sesji i umieścić go w polu typu HIDDEN. Chociaż w tym przypadku można wykraść kod i spreparować formularz, stosując podobnie jak powyżej 2 żądania "obrazki".
Zatem jednak lepiej wysyłać ocenę metodą POST.
Tylko co zrobić z osobami, które wyłączyły JavaScript? Uniemożliwić im głosowanie? Ewentualnie utworzyć link w <noscript> prowadzący do alternatywnego formularza. To może znów stanowić problem dla użytkowników PDA lub telefonów komórkowych, bo chyba wszystkie modele obsługują JavaScript i AJAX. Każde żądanie kosztuje!
Jakie jest wasze zdanie? Jakie są wady i zalety różnych rozwiązań? Które najlepsze i dlaczego?