Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zabezpieczyć?
Forum PHP.pl > Forum > Przedszkole
GoldeNx3
Witam. napisałem sobie prosty skrypt sklepu. Gdy ktoś coś kupic i kliknie przycisk "Kup" to odpala siędrugi skrypt, który wszystkie wpisane dane wysyła mi na e-mail. Po tym pokazuje się informacja, że wiadomość została wysłana poprawnie. Jak zrobić jakieś zabezpieczenie typu token lub czasowe, by ktoś kto kliknie odśwież na napisie z powodzeniem nie wysłało kolejnego e-maila?
mat-bi
A znasz coś takiego jak sesja?
gargamel
W pliku w którym masz formularz tworzysz losową zmienną.
Np:
  1. $v = microtime(true);

Dodajesz tą zmienną do sesji:
  1. $_SESSION['v'] = $v;

Wrzucasz do formularza:
  1. <input type='hidden' name='v' value='<?php $v ?>' />


A w pliku wysyłki:
  1. if($_POST['v'] == $_SESSION['v']){
  2. //Wysyłanie maila....
  3. $_SESSION['v'] = '';
  4. }
GoldeNx3
Moglibyście mi podrzucić więcej informacji nt. tej sesji?

@Edit:

@Up

Chyba coś źle robię, bo nie działa mi to. : / Wysyła po odświeżeniu dalej.
bastard13
Po pierwsze, to nie używaj session_register(), ponieważ jest tutaj zbędna, a dodatkowo w przyszłych wersjach php ma zostać wycofana.
Oczywiście pomysł z sesją jest dobry.
Plik odbierający posta:
  1. <?php
  2.  
  3. $toFast = 5; //ilość sekund, po których można wysłać kolejnego maila
  4.  
  5. if(isset($_SESSION['last_email']) && (time() - $_SESSION['last_email'] <= $toFast))
  6. exit(); //kończenie skryptu jeżeli posta przesłano zbyt szybko (oczywiście może tutaj być dowolny blok instrukcji)
  7.  
  8. $_SESSION['last_email'] = time(); //aktualny czas
  9.  
  10. //wysyłanie maila
  11. ?>

GoldeNx3
Ok, to mi działa. ; DD

A jak zrobić np. Token?
gargamel
No właśnie tak.
Co do session_register - mój błąd, nie potrzeba tej linijki.
Pokaż kod którego używasz to będzie łatwiej
GoldeNx3
Formularz:
  1. http://wklejto.pl/94249



Akcja, gdy ktoś wciśnie wyślij:
  1. http://wklejto.pl/94248



Proszę nie patrzeć, na estetykę, bo to mój pierwszy tak rozbudowany (jak dla mnie haha.gif) skrypt. Wszystko działa i się cieszę, ale ten token?
gargamel
W pliku http://wklejto.pl/94249 (nie wiem jak on się nazywa)
Na samym początku dajesz
  1. $v = microtime(true);
  2. $_SESSION['v'] = $v;

Później gdzieś w formularzu (np niech to będzie 119 linia) wrzucasz
  1. <input type='hidden' name='v' value='<?php echo $v ?>' />

(W pierwszym poście zapomniałem echa)

Natomiast w pliku v_send.php musisz dodać warunek na wysłanie maila, na przykład:
  1. if($_POST['v'] == $_SESSION['v']){
  2. //Wysyłanie maila.... - może być cała zawartość Twojego obecnego skryptu, oczywiście oprócz session_start();
  3. $_SESSION['v'] = false; // Tu usuwasz token - a więc przesyłany ponownie z formularza, nie będzie już się zgadzał z tym w sesji
  4. }
  5. else{
  6. //Tu jakieś instrukcje które mają się pojawić po odświeżaniu, np: echo "Psze nie odświeżać tej strony!!!";
  7. }
GoldeNx3
Token to bardziej na myśli miałem obrazek z kodem do przepisania. ;d

Btw. Jak do tego kodu mogę wprowadzić np. sprawdzenie, czy w e-mailu znajduje się @?
wujekkk
Cytat(GoldeNx3 @ 31.03.2011, 22:41:07 ) *
Token to bardziej na myśli miałem obrazek z kodem do przepisania. ;d

Btw. Jak do tego kodu mogę wprowadzić np. sprawdzenie, czy w e-mailu znajduje się @?



Co do obrazka z kodem wpisz w google wyrażenie captcha. Na pewno znajdziesz




Sprawdzenie email:

ja korzystam z: filter_var($email, FILTER_VALIDATE_EMAIL);

Pozdrawiam
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.