Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak zabezpieczyć?
GoldeNx3
post
Post #1





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
mat-bi
post
Post #2





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

Ostrzeżenie: (0%)
-----


A znasz coś takiego jak sesja?
Go to the top of the page
+Quote Post
gargamel
post
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


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


Ten post edytował gargamel 31.03.2011, 19:15:01
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #4





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował GoldeNx3 31.03.2011, 19:22:55
Go to the top of the page
+Quote Post
bastard13
post
Post #5





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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



--------------------
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #6





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

Ostrzeżenie: (0%)
-----


Ok, to mi działa. ; DD

A jak zrobić np. Token?
Go to the top of the page
+Quote Post
gargamel
post
Post #7





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #8





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował GoldeNx3 31.03.2011, 20:41:08
Go to the top of the page
+Quote Post
gargamel
post
Post #9





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


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


Ten post edytował gargamel 31.03.2011, 21:35:18
Go to the top of the page
+Quote Post
GoldeNx3
post
Post #10





Grupa: Zarejestrowani
Postów: 228
Pomógł: 1
Dołączył: 24.12.2010

Ostrzeżenie: (0%)
-----


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ę @?
Go to the top of the page
+Quote Post
wujekkk
post
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.03.2010

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:20