Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] otwiernie strony tylko w 1 przegladarce
Forum PHP.pl > Forum > Przedszkole
Woijtek338
Witam!
Posiadam platformę nauczania. Ludzie logują się i oglądają slajdy - kazdy slajd ma kilka sekund po czym jest zaliczany.
Luka polega na tym , że z jednego komputera można otworzyć np. 3 przeglądarki i na raz przesuwać slajdy żeby było szybciej.
Jak się przed tym zabezpieczyć ?
Magic WWW
Hmm jak bym może kombinował z ciasteczkami. Zapisujesz do ciasteczka user agent i potem po prostu porównujesz, na właściwej przeglądarce po zakończeniu pokazu slajdów lub zamknięciu przeglądarki usuwasz ciasteczko i tyle. Na pozostałych przeglądarkach sprawdzasz tylko user agent czy się zgadza, jeśli nie to wyświetlisz informacje dla użytkownika, że już ma uruchomiony pokaz w innej przeglądarce wink.gif
Adi32
Ciasteczka łatwo oszukać. Ja proponuje po IP;

  1. $_SERVER['REMOTE_ADDR']


Gdzieś tam sobie zapisujesz, w trakcje odtwarzania a przy okazji sprawdzasz czy przed chwilą z takiego IP nie było już coś odtworzone;
nekomata
Cytat
Luka polega na tym , że z jednego komputera można otworzyć np. 3 przeglądarki i na raz przesuwać slajdy żeby było szybciej.
Więc tak :
IP - Nie pomoże
Ciastko - Nie pomoże
Masz to w bazie tak?
No to porównuj czas poprzedniego dodanego (jeśli istnieje) z czasem aktualnym.
I wtedy do całości niema nic IP, ciastko , przeglądarka ... oszust zostanie odrzucony.
Woijtek338
No niestety , nie mam w bazie zapisywanego czasu - bo po co ? Wygląda to tak , że odlicza czas na stronie, i jak dojdzie do 0 to dodaje do tabeli dane slajdu który juz został oglądnięty przez danego ucznia i na podstawie tego określa czy slajd został zaliczony . Po IP też niezbyt - jeśli mam w sali kilku uczniów to mogą być problemy. Z Ciachami to jest wogóle możliwe ? Przeciez ciasteczka zapisują się tylko w danej przeglądarce, to skąd inna przeglądarka bedzie o tym ciachu wiedzieć ?
PanGuzol
Jak uczeń jest lebrem to nawet jak go zmusisz to się nie nauczy, a jak go to będzie interesowało to nie będzie oszukiwał więc po co się męczyć.
Ja bym sprawdzał $_SERVER['HTTP_USER_AGENT'] może i nie daje 100% pewności ale zakładam, że twoi odbiorcy mogą nie wiedzieć jak to oszukać.
Woijtek338
W sensie , żeby zapisać do bazy przy logowaniu danego uzytkownika z jakiej przeglądarki korzysta ? I potem porównać ?
lobopol
Cytat(PanGuzol @ 1.07.2011, 14:23:01 ) *
Jak uczeń jest lebrem to nawet jak go zmusisz to się nie nauczy, a jak go to będzie interesowało to nie będzie oszukiwał więc po co się męczyć.
Ja bym sprawdzał $_SERVER['HTTP_USER_AGENT'] może i nie daje 100% pewności ale zakładam, że twoi odbiorcy mogą nie wiedzieć jak to oszukać.

A co to da gdy ktoś otworzy w kilku zakładkach? Najlepsza opcja jest z czasem
Sephirus
hmm wydaje mi się, że mam łatwe rozwiązanie choć nie wiem jak masz to technicznie wykonane ale wygląda ono tak:

- User "A" wchodzi na konkretny pokaz 10 slajdów (przykład) strona pokaz.php, serwer zapisuje czas rozpoczęcia pokazu slajdów,
- po załadowaniu strona wysyła ajaxa że A chce slajd 1, serwer zapisuje czas żądania i wysyła slajd pierwszy,
- po obejrzeniu slajdu 1 idzie kolejny ajax, serwer sprawdza czy A obejrzal slajd 1 w żądanym czasie jeśli tak to zalicza, podaje slajd 2
- sytacja powyżej powtarza się dla wszystkich kolejnych slajdów aż do końca,
- koniec slajdów wysyłamy ajax kończący i zaliczamy prezentację itp...

Zakładam że ajax wysyła dane pod slajd.php

I teraz tak:

Ten sam user "A" w trakcie działania pokazu wchodzi jeszcze raz gdziekolwiek na świecie, korzystając z czego chce by uruchomić pokaz równoległy bo chce oszukać system,
skrypt pokaz.php sprawdza za każdym wywołaniem czy ten pokaz nie został już zaliczony i czy czasem obecny czas odjąc czas rozpoczęcia pokazu nie jest mniejszy od czasu jego trwania - jeśli jest oznacza to że user nie dokończył pokazu, lub oszukuje - wyrzucamy komunikat w stylu "Pokaz slajdów jeszcze trwa odczekaj {pozostaly_czas} by rozpocząć pokaz od nowa.

Nie do oszukania wink.gif

Do zapisu czasu rozpoczęcia pokazu użyj bazy
Do zapisu czasu rozpoczęcia oglądania slajdu wystarczy sesja

Ten systemik można oszukać - ale jest to dość trudne wink.gif

by_ikar
za pomocą sesji można np w niej trzymać ID które przy każdym logowaniu jest inne. Mieć w bazie danych tabele, w której się przetrzymuje jakby ludzi online, która jest czyszczona jakimiś tigerami po każdym update z polami starszymi niż jakiś określony czas. I teraz juzer się loguje, masz w bazie inne ID sesji, ale ID użytkownika się zgadza, tworzysz nowy rekord, a stary prawie pasujący kasujesz, wtedy wylogowuje starego usera. Coś w ten deseń jakby..

Nie wiem czy nie namieszałem więc podsumuje. W bazie trzymasz ID użytkownika i ID sesji, które jest dodawane tylko podczas logowania, podczas poruszania się po serwisie, sprawdzane jest czy ID sesji i ID usera istnieje w bazie, jeżeli nie, użytkownik nie jest zalogowany. Podczas logowania sprawdzasz czy istnieje jakiś rekord w tabeli z userami online z ID użytkownika, jeżeli istnieje kasujesz i tworzysz nowy rekord z ID użytkownika i ID sesji które właśnie zostało wygenerowane. W efekcie logując się na innej przeglądarce wyloguje go z poprzedniej. To samo tyczyć się będzie komputerów itp. Do tej tabeli możesz jeszcze IP dorzucić czy coś.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.