ďťż
Podstrony
|
telcocafeWitamOstatnio 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 :) |
|||
Sitedesign by AltusUmbrae. |