• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rejestracja uzytkownika . Co w tym kodzie jest nie tak ?

Object Storage Arubacloud
0 głosów
217 wizyt
pytanie zadane 8 sierpnia 2015 w PHP przez daniel89 Użytkownik (700 p.)

Jak w temacie. Nie chce mnie przeżucić do strony Index.php i dodać do bazy użytkownika , jak ktoś wie jak to poprawnie zrobić to prosił bym o pomoc : 

<?php


session_start();
require_once "connect.php";


if(isset($_GET['activate'])){
	$key= $_GET['activate'];
	$user = $db -> Query('SELECT `kod` FROM `uzytkownicy` WHERE `kod` = "' .$key. '"');
	$user = $user -> fetch(PDO::FETCH_ASSOC);
	if(empty($user)){
		header("Location: Index.php?error=3");
		exit;
	}
	
	$db -> Exec('UPDATE `uzytkownicy` SET `kod` ="active" WHERE `kod` ="'.$key .'"');
	header("Location: Index.php?success=1");
	exit;
}

if(isset($_POST['register'])){
	exit;
}
	if(empty($_POST['login']) || empty($_POST['haslo']) || empty($_POST['haslo2']) || empty($_POST['email'])) {
		header("Location: Index.php?error=0");
		exit;
	}
	$login = $_POST['login'];
	$haslo = $_POST['haslo'];
	$haslo2 = $_POST['haslo2'];
	$email = $_POST['email'];
	$klucz = md5(mt_rand());
	
	$login = htmlentities($login, ENT_QUOTES, "UTF-8");
	$haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
	$haslo2 = htmlentities($haslo2, ENT_QUOTES, "UTF-8");
	$email = htmlentities($email, ENT_QUOTES, "UTF-8");
	$klucz = htmlentities($klucz, ENT_QUOTES, "UTF-8");
	
	if($haslo != $haslo2){
		header("Location: Index.php?error=1");
		exit;
	}
	$uzytkownicy = $db -> Query('SELECT `user` FROM `uzytkownicy` WHERE `user` = "'.$login.'"');
	$uzytkownicy = $uzytkownicy -> fetch(PDO::FETCH_ASSOC);
	if(!empty($uzytkownicy)){
		header("Location: Index.php?error=2");
		exit;
	}
	$db -> Exec('INSERT INTO `uzytkownicy` VALUES("","'. $login . '","'.$haslo.'","'. $klucz . '")');
	
	$email_template= "email_activation_template.html";
	$wiadomosc = file_get_content($email_template);
	$wiadomosc = str_replace("[login]", $login, $wiadomosc);
	$wiadomosc = str_replace("[key]", $klucz, $wiadomosc);
	$wiadomosc = str_replace("[url]","http://". $_SERVER['HTTP_HOST'] .$_SERVER['PHP_SELF'], $wiadomosc);
	$naglowki ='From: localhost@daniel.cba.pl' . "\r\n" .
				'Reply-To: localhost@daniel.cba.pl'."\r\n" .
				'Content-type: text/html; charset=utf-8' . "\r\n";
	mail($login, "Aktywacja konta" .$login, $wiadomosc, $naglowki);
	
	header("Location: Index.php?success=0&login=".$login);
	
	exit;

?>

 

1 odpowiedź

+1 głos
odpowiedź 8 sierpnia 2015 przez Comandeer Guru (601,590 p.)

A co ma htmlentities do zabezpieczania bazy danych? Poczytaj o prepared statements, bo Twój kod jest dziurawy jak ser szwajcarski.

Hasło w plaintext? Auć. Polecam poczytać o password_hash i password_verify

Możesz np. obadać ten system: http://www.forumweb.pl/gotowe-komponenty-www/skrypt-system-rejestracji-i-logowania-profil-2-0/487677#487677 → podsunie Ci dużo ciekawych pomysłów

Co do tego "nie działa": jakie błędy wyświetla?

komentarz 8 sierpnia 2015 przez daniel89 Użytkownik (700 p.)
nie wyświetla błędów , po prostu nie działa tak jak trzeba . Chodzi mi w tym momencie o to by wysłało meila na pocztę o aktywacji użytkownika i tego nie robi . Ma przejść do strony Index.php , a wyświetla biały ekran na zarejestruj.php .
komentarz 8 sierpnia 2015 przez Comandeer Guru (601,590 p.)
Co do maila: uruchamiasz na localhost? Jeśli tak, to mail na bank nie będzie działał.

Co do białej strony: http://forum.php.pl/Jak_poprawnie_zadac_pytanie_oraz_przygotowac_srodowisko_pracy_t146215.html → zwłaszcza o wyświetlaniu błędów
komentarz 8 sierpnia 2015 przez daniel89 Użytkownik (700 p.)
no to nieźle jak na localhsot nie działa . To gdzie ja to sprawdzę ? Na innym by przekierowało na Index i dodało użytownika ? czy gdzieś jest błąd ?
komentarz 8 sierpnia 2015 przez Comandeer Guru (601,590 p.)
Mówię o samym wysyłaniu mailów - cała reszta powinna działać. Bo żeby wysłać maila trzeba mieć serwer SMTP.
komentarz 8 sierpnia 2015 przez daniel89 Użytkownik (700 p.)

htmlentities -> mówiłeś że to nie będzie tutaj działać , wytłumaczysz ? W logowaniu Pan MZ przepuszczał przez to zmienne przesłane POSTEM , że niby eliminowało jak by ktoś chciał atakować SQL . Czy coś pomieszałem?

komentarz 8 sierpnia 2015 przez daniel89 Użytkownik (700 p.)
Po skomentowaniu części kodu odpowiedzialnego za wysyłania meila dalej białą stronę wyświetla. Dobrze na pewno to dodaje dane do MySQL ? id, user, kod, email . Tablica jest 4 elementowa i jakoś nie idzie mi to wcale .
komentarz 8 sierpnia 2015 przez Comandeer Guru (601,590 p.)
To dziwne, bo to nie eliminuje żadnego ataku SQL… Podałem Ci rozwiązanie: prepared statements → https://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO

Co do błędów: spróbowałeś je włączyć, tak jak w podesłanym temacie na forum.php.pl?
komentarz 9 sierpnia 2015 przez daniel89 Użytkownik (700 p.)
Czyli ta cała biblioteka PDO jest bezpieczna , odporna na włamania ? można dzięki temu zarejestrować bezpiecznie czy czegoś będzie brakować?

Obsługę poczty będę miał jak Apache zainstaluję i czy to bardzo mi kompa zamuli?
komentarz 9 sierpnia 2015 przez Comandeer Guru (601,590 p.)
Nie, biblioteka PDO sama w sobie nie jest bezpieczna. Natomiast wykorzystanie prepared statements przy jej pomocy - tak.

XAMPP przecież zawiera Apache'a… Serwer SMTP != serwer WWW.

Podobne pytania

0 głosów
4 odpowiedzi 154 wizyt
pytanie zadane 3 stycznia 2016 w PHP przez R3VIK Nowicjusz (200 p.)
0 głosów
5 odpowiedzi 335 wizyt
pytanie zadane 31 grudnia 2015 w PHP przez McShadow Obywatel (1,050 p.)
0 głosów
2 odpowiedzi 207 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...