Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> aktywacja konta przez kod w email'u
nikestylex7
post
Post #1





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Witam pogubiłem się całkowicie gdyż jestem początkującym programistą. Chciałbym zrobić aktywacje konta przez kod wysyłany podczas rejestracji. Po rejestracji do bazy zostaje dodany kod aktywacyjny oraz zostaje on wysłany na email nie wiem jak zrobić żeby id znajdowało się w w tablicy get oraz kod żebym później mógł to sprawdzić z bazą i zmienić wartość w tabeli aktywnosc na 1. Oto mój kod

  1. $akod = md5(uniqid(rand(), true));
  2. $user = htmlspecialchars($_POST['user']);
  3. $email = htmlspecialchars($_POST['email']);
  4. $id = ("SELECT id FROM user WHERE user = '".$user."' LIMIT 1") or die(mysql_error());
  5. $id = $_GET['id'];
  6. $akod2 = "http://semczak.xaa.pl/rejestracja_.php?id=".$id."&akod=".$akod;
  7. $mail_headers = "From: Mohergame.pl\r\nReply-To: Mohergame.pl\r\n";
  8. $mail_headers.= "Content-Type: text/html;\n";
  9. $mail_headers.= "\tcharset=\"UTF-8\"\n";
  10. $mail_headers.= "Content-Transfer-Encoding: 8bit\n\n";
  11. $temat = ("Kod aktywacyjny");
  12. mail($email, $temat, $akod2, $mail_headers);
  13. mysql_query("INSERT INTO user SET user='$user', haslo='$haslo', email='$email', przydomek='$przydomek', akod='$akod'");
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
abort
post
Post #2





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


Działa wszystko? Dziwne, bo według mnie nie powinno.

1. w listingu w linii 20 masz "ALERT" zamiast "ALTER".
2. jeśli nawet będzie "ALTER", które skasuje kolumnę "akod", to skasuje ją w całej tabeli - a to implikuje niemożność wygenerowania kodu dla innego usera (co zrobi INSERT z linii 13 jeśli nie będzie kolumny 'akod'? Bo imho wywali skrypta).
2a. wyobraź sobie sytuację, że dwóch użytkowników aktywuje się w zbliżonym czasie. Dodajesz dla dwóch userów wpis w kolumnie "akod". Potem jeden się aktywuje, loguje, kolumna "akod" zostaje skasowana - co się stanie w momencie próby aktywowania drugiego usera? Skrypt się wyburaczy w linii 16 (z listingu) - po klauzule "WHERE" warunek nie może przyjąć żadnej wartości logicznej, bo nie ma kolumny "akod", więc nie ma czego porównać z parametrami przekazanymi w $_GET.
3. poczytaj o SQL injection - mam nieodparte wrażenie, że ten kod jest podatny na taki atak

Moja rada: albo zostawiasz tabelę z kolumną "akod" na stałe, albo odpytujesz inną tabelę, np. o nazwie "aktywacja" - dla tych nowo aktywowanych użytkowników (a którą to tabelę można także wykorzystać np. na ponone wygenerowanie linku pozwalającego na zalogowanie się w serwisie - to może być przydatne w sytuacji "zapomniałem hasła".

Ten post edytował abort 23.12.2011, 22:19:29
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 14.10.2025 - 09:48