Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]E-mail potwierdzający rejestrację.
Forum PHP.pl > Forum > Przedszkole
Makciek
Witam!
Jak można zrobić skrypt, który będzie wysyłał e-mail z linkiem potwierdzającym rejestrację?
W bazie mam pole "aktywacja", jako domyślnie jest ono ustawione na "nie" i jak zrobić, żeby po naciśnięciu na link, ówcześnie wysłanego do klienta e-mailem, zmieniało się na tak?

Właśnie wymyśliłem żeby jako parametr $_GETa w tym linku zawierał tylko id, i skrypt będzie zmieniał wartość "nie" na "tak" w rekordzie o podanym w adresie id, ale czy takie rozwiązanie będzie dobre?
blooregard
Do linku dodaj wygenerowany losowo ciąg znaków i ten sam ciąg zapisz do bazy danych w odpowiednim rekordzie.
Po kliknięciu przez usera na link aktywacyjny porównaj ciąg przesłany GET-em z zapisanymi w bazie i w rekordzie, w którym będzie się zgadzał, zrób update "nie" na "tak". Równocześnie zerujesz wartość pola z losowym ciągiem (potem możesz go używać np. do przypominania zapomnianego hasła, generując nowy ciąg).

Przesyłanie samego ID jest lekko mało bezpieczne. Zakładając, że zalogowany user jest w Twojej aplikacji identyfikowany właśnie przez ID, może to doprowadzić do sytuacji podszywania się poprzez manipulację tym parametrem. Z jednorazowymi kodami, generowanymi losowo i nie powiązanymi bezpośrednio z ID usera, nie ma tego problemu.
kanji
możesz id albo coś innego winksmiley.jpg np. ktoś się zarejestrował u Ciebie, wysyłasz do niego e-mail czy napewno dokonał rejestracji wysyłasz do niego linka np. strona.pl/aktywuj.php?uzytkowni=nazwa
z tylko z tym ze przed wysylką np. zrób sobie szyfrowanie w bazie np
przy insercie do bazy uzytkowanika jakas nazwe szyfrujesz MD5(nazwa) po czym jak koles kliknie na linka sprawdzasz wartosci uzytkowni(ale pamietaj ze ma to byc tez przez szyfrowanie, albo deszyfrowanie) jesli wartosci te beda sie zgadzac to w bazie atywny zmieniasz na tak.
Makciek
nie tongue.gif
user po zalogowaniu w sesji ma wpisaną grupę dostępu(w sesji, po wylogowaniu wszystkie dane o sesji są niszczone przez sesion destroit), więc nie ma jak się pod kogoś podszyć jeśli zna się jego id.

No i jeszcze jedno pytanie, jak to zrobić: wygenerować losowo tongue.gif, jakoś w kursie z którego się uczyłem PHP, nie było ani słówka o tym :/

i bezpieczeństwo będę poprawiał jak już całą stronę zrobię, wiem wiem może wydawać się to dość głupie, ale to mój pierwszy skrypt strony, więc chce poznacz wszystko po kolei, a poza tym jeśli się człowiek raz sparzy(dodatkowa robota) to później już będzie próbował tego uniknąć. smile.gif i dowie się co zrobił żle
kanji
może to byc ciąg znaków albo poprostu jakis cyfr np
$ciag=rand(10000000,999999999) będziesz miec 9 cyfrowa liczbe daj jeszcze MD5 i będziesz miec dużo znaczków winksmiley.jpg
Makciek
ok smile.gif

no i jeszcze jedno głupie pytanie tongue.gif
czy w bazie hasło mam zapisaywać jako varhar, czy password, jeśli password to jak to później odkodować?
blooregard
Cytat
czy w bazie hasło mam zapisaywać jako varhar, czy password, jeśli password to jak to później odkodować?

Zapisujesz jako hash, najlepiej taki łączony, czyli np. SHA1(MD5('hasło'));

NIGDY nie zapisujesz hasła jawnym tekstem.
NIGDY nie odkodowujesz hasła.

Proces uwierzytelniania polega na porównaniu, czy ciąg uzyskany po wykonaniu hashowania na podanym przez usera haśle jest równy temu, który jest zapisany w bazie. A będzie rółny tylko wtedy, gdy to hasło będzie tym prawidłowym, bo:

1: Uzytkownik rejestrując się podaje #haslo

2: #hash = sha1(md5(#haslo)) , następnie #hash zapisujesz do bazy danych (pole VARCHAR(40) dla SHA1 )

3: Logowanie (user podaje #login)
#login == #haslo wtedy i tylko wtedy, gdy sha1(md5(#login)) = #hash (ten w bazie)

Kumasz?
Makciek
ok rozumiem smile.gif, ale login też mam kodować? dobrze zrozumiałem ?
Fifi209
Login nie, tylko hasło.

Chciałbym dodać, że zamiast głupiego 'tak' i 'nie' daj tam bool (true or false)
Abaddor
Zauważyłem że wszędzie robią tak:

Ktoś robi konto, zapisujesz mu w tabeli wygenerowany klucz aktywacyjny. Klucz ten wszyscy robią tak:
  1. <?php
  2. $losowa = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  3. ?>


Następnie wysyłasz komuś linka z metodą GET np. www.domena.pl/rejestracja.php?info=aktywacja&key=$losowa
On klikając na link wchodzi na stronę, sprawdzasz czy $_GET['info'] == 'aktywacja'; jeśli tak to przypisujesz $key = $_GET['key']; i stosujesz zapytanie:


  1. UPDATE uzytkownicy SET aktywacja = 'tak' WHERE klucz='$key'



Tak tez ja zrobię na stronie którą tworzę.
Choć mam jedno ale.

Co jeśli str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890"); wygeneruje mi 2 takie same kody, i jeden użytkownik całkiem przypadkowo akceptuje konto swoje i innego? Niby przypadek jeden na milion, ale jednak....
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.