ďťż

[PHP] Zabezpieczanie formularzy przed nabijaniem tekstu

       

Podstrony


telcocafe

Witam
Ostatnio się głowię nad tym jak zabezpieczyć formularze przed nabijaniem tekstu np. w url'u. Załóżmy, że mamy formularz, który przesyła nas GETEM do strony x.php, a tam mamy polecenia sql aby dodawało nam wartości do bazy.
Myślałem nad pytaniem dodatkowym w formularzu (np. ile jest 3+9), ale to raczej odpada, ponieważ po wpisaniu adresu:
http://www.strona.pl/index.php?strona=costam&data2=1999-11-11&pytanie=odpowiedz&zapisz=Zapisz
I przy naciskaniu na enter, to wartości non stop by się nabijały. Jak znaleźć rozwiązanie na mój problem stosując w formularzu przesyłanie typu GET?
Użytkownik sauron edytował ten post 25 sierpień 2007, 21:53


To może popularna CAPCHTA?

http://compzone.org/...a+w+PHP-30.html

Ale IMHO jak dane prześlemy getem i wykażemy, że np. Obrazek1 = 9310, to ciągle będzie nam to akceptować.

:unsure:

Ja sądzę,że tak się nie da. Musisz wykorzystać jakieś ciasteczko czy sesję . . .
Chodzi Ci może o możliwość odświeżenia strony? Ja się zabezpieczam przed tym odświeżając stronę po wykonaniu zapytania (dodaniu danych do bazy).



Hmmm postawiłem na sesje. Zrobiłem tak:
session_register("count"); $count++; echo("$count"); if ($count == 1) { dodawaj do bazy } else { wyrzucaj osobnika ze strony }

Jest to odporne na takie "odświeżanie" i inne >zabawy<? Trzeba będzie otwierać na nowo przeglądarkę, a to raczej sporo utrudnia i nie można nabić kilkadziesiąt wpisów na minutę.
Użytkownik sauron edytował ten post 25 sierpień 2007, 23:06
Z tego co widzę to masz włączone zmienne globalne,a to nie problem :) Wystarczy $count ustawić na -1 i można jechać :lol: Chyba że to tylko ekstra uproszczone (aż z tym błędem) demo?
Ciacho sesji zawsze można usunąć . . . Ale to wiedzą nieliczni :) Możesz również udostępniać to tylko zarejestrowanym,ale jeżeli to jakiś prosty formularzyk to nie opłaca się . . .

Walka ze spambotami


Walka ze spambotami
Bełdzio, dzięki ale to nie spamboty tylko myślący użytkownicy. Chcę się zabezpieczyć przed cwaniactwem ;]

Hmmm.. jeśli Ci chodzi o zapisywanie tych samych wartości, to może tak: przed zapisaniem danych w bazie sprawdzać, czy identyczne dane nie istnieją już. Czyli najpierw SELECT z warunkami i jeśli zwróci rekord to nie zapisujemy.

Jeszcze inna myśl jaka mi przychodzi to pole UNIQUE - rozwiązanie chyba bardziej wydajne niż poprzednie.


~
Właśnie chodzi o to, że mogą być identyczne :D. Ale myślę, że wystarczy dodać sesje. Bełdzio doradził mi, żebym dał ograniczenie czasowe na dodawanie tych samych wartości
Użytkownik sauron edytował ten post 26 sierpień 2007, 13:40
Ja proponuję ciasteczka(blokada wysyłania formularzy z danej przeglądarki na 1 godzinę) i nadawanie unikatowego numeru każdemu wpisowai
Tworzymy ciąg 10 losowych znaków, sprawdzamy niepowtarzalność ciągu w bazie (funkcje rand i chr) i wrzucamy po wysłaniu formularza do bazy wraz z innymi wartościami w dodatkowym polu
przy dodawaniu wpisu sprawdzamy wcześniej czy dany 'kod' już nie znajduje się w bazie danych
jeżeli zostanie znaleziony to zatrzymujemy skrypt funkcją die
teraz aby ktoś wysłał kupę śmieci to musi za każdym razem wypełniać formularz i losować kod
chyba że odkryje ten kod, ale raczej się wcześniej zniechęci(po ciasteczkach blokujących 1 próba na godzinę i mu sięodniechce po 5-10 próbach
pomysł z sesjami też niezły i możnaby go dołożyć jakby ktoś wywalił ciasteczka
Użytkownik piotr94 edytował ten post 27 sierpień 2007, 11:05
Ciasteczka to jest dobry pomysł ale przecież można je z łatwością usunąć... Samemu grzebiąc w plikach lub chociażby przez jedną z opcji FF...

Moja propozycja jest taka, żebyś w pliku z formularzem ustawiał $_SESSION['count'] na 0 a w pliku, który dodaje sprawdzasz i ustawiasz na 1. W ten sposób unikniesz odświeżania, bo dodać będzie można tylko jeśli pierw odwiedzi się stronę z formularzem.


~
Właśnie już tak zrobiłem. Dzięki wszystkim za pomoc :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.