Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]E-mail potwierdzający rejestrację.
Makciek
post 13.07.2009, 17:38:38
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 5
Dołączył: 7.03.2009
Skąd: Rzeszów

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


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?

Ten post edytował Makciek 13.07.2009, 17:42:46
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
blooregard
post 13.07.2009, 17:46:18
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
kanji
post 13.07.2009, 17:50:20
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 27.06.2005
Skąd: Opole

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


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.


--------------------
:: don't you know, I'm LoCo
Go to the top of the page
+Quote Post
Makciek
post 13.07.2009, 17:58:19
Post #4





Grupa: Zarejestrowani
Postów: 126
Pomógł: 5
Dołączył: 7.03.2009
Skąd: Rzeszów

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


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

Ten post edytował Makciek 13.07.2009, 17:58:51
Go to the top of the page
+Quote Post
kanji
post 13.07.2009, 17:58:41
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 27.06.2005
Skąd: Opole

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


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


--------------------
:: don't you know, I'm LoCo
Go to the top of the page
+Quote Post
Makciek
post 13.07.2009, 18:02:08
Post #6





Grupa: Zarejestrowani
Postów: 126
Pomógł: 5
Dołączył: 7.03.2009
Skąd: Rzeszów

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


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ć?
Go to the top of the page
+Quote Post
blooregard
post 13.07.2009, 22:08:41
Post #7


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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?


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Makciek
post 16.07.2009, 19:31:57
Post #8





Grupa: Zarejestrowani
Postów: 126
Pomógł: 5
Dołączył: 7.03.2009
Skąd: Rzeszów

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


ok rozumiem smile.gif, ale login też mam kodować? dobrze zrozumiałem ?
Go to the top of the page
+Quote Post
Fifi209
post 16.07.2009, 19:35:43
Post #9





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Login nie, tylko hasło.

Chciałbym dodać, że zamiast głupiego 'tak' i 'nie' daj tam bool (true or false)


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Abaddor
post 23.07.2009, 11:35:20
Post #10





Grupa: Zarejestrowani
Postów: 65
Pomógł: 9
Dołączył: 30.06.2009

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


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....
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:46