[PHP][JS] Głosowanie za pomocą gwiazdek - bezpieczeństwo

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
WebCM
Nowy
Nowy
Posty: 31
Rejestracja: sob wrz 10, 2005 6:57 pm

[PHP][JS] Głosowanie za pomocą gwiazdek - bezpieczeństwo

Post autor: WebCM »

Kod:

Kod: Zaznacz cały

<ul class="rate avg3">
	<li><a href="vote.php?rate=1" class="r1">1</a></li>
	<li><a href="vote.php?rate=1" class="r2">2</a></li>
	<li><a href="vote.php?rate=1" class="r3">3</a></li>
	<li><a href="vote.php?rate=1" class="r4">4</a></li>
	<li><a href="vote.php?rate=1" class="r5">5</a></li>
</ul>
Chcę umożliwić także głosowanie użytkownikom z wyłączoną obsługą JS (AJAX). Chyba, że to bez sensu?

W przykładzie oceny są wysyłane metodą GET. Bardzo niebezpiecznie, bo użytkownik może zagłosować nieświadomie:

Kod: Zaznacz cały

<a href="vote.php?id=500&ocena=1">Cud na boisku - Polacy wygrali 5:0</a>
<img src="vote.php?id=4&ocena=5" /> - tak, z dowolnego miejsca w Internecie
Formularz musi być koniecznie wysłany metodą POST. Tylko zostaje pytanie:
A. Zastosować alternatywny formularz dla użytkowników bez JS
B. Oprzeć głosowanie o <input type="image" />, ale prawdopodobnie tracę kontrolę nad gwiazdkami w CSS
C. Generować gwiazdki za pomocą JS, a domyślnie wyświetlać tylko ocenę z linkiem do alternatywnego <form> w <noscript>
D. Dołączyć arkusz CSS i wysłać kod HTML z gwiazdkami. Zignorować użytkowników bez JS.

Chociaż w przypadku POST też jest zagrożenie, że trafisz na stronę ze złośliwym skryptem JS. Tylko znacznie mniejsze.
webdevil
Posty: 4
Rejestracja: ndz wrz 14, 2008 12:08 am
Kontakt:

Re: [PHP][JS] Głosowanie za pomocą gwiazdek - bezpieczeństwo

Post autor: webdevil »

wysyłaj przez GET...

przecież możesz(musisz!) sprawdzić czy takie id jest w bazie więc co tutaj nie ma mowy o niebezpieczeństwie
tak samo musisz sprawdzać przy ajax'ie więc nie widzę tutaj różnicy.
oczywiście oprócz id sprawdzaj też ocenę czy jest w zakresie 1-5
WebCM
Nowy
Nowy
Posty: 31
Rejestracja: sob wrz 10, 2005 6:57 pm

Re: [PHP][JS] Głosowanie za pomocą gwiazdek - bezpieczeństwo

Post autor: WebCM »

Chyba do końca nie rozumiesz problemu. Firma A umieszcza w serwisie ocen swój produkt. Następnie na wielu forach umieszcza obrazek, który prowadzi do: domena.serwisu/vote.php?id=54&rate=6

Wprawdzie może to też zrobić metodą POST, ale nie na cudzym forum. Tak więc ryzyko mniejsze.
webdevil
Posty: 4
Rejestracja: ndz wrz 14, 2008 12:08 am
Kontakt:

Re: [PHP][JS] Głosowanie za pomocą gwiazdek - bezpieczeństwo

Post autor: webdevil »

z tego co widzę to nigdzie w pierwszym poście nie napisałeś że to ma być takie głosowanie (linki w forach etc.)...

jeśli chcesz zablokować możliwość zmienienia ID to utwórz sobie tabele kodów i przypisuj jakieś losowe np. md5 -> id / ocena i podajesz linka vote.php?code=tutaj_md5...
ODPOWIEDZ