Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Feedback moich skryptów, proszę o rady i wskazówki
anatman
post 25.07.2013, 19:06:29
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.07.2013

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


Witam uprzejmie wszystkich koderów!

Zacząłem budować pewien serwis, jednak moje umiejętności są niekompletne i dość chaotyczne(samouk). Dlatego prosiłbym o odsłuch z waszej strony. Chciałem w tym temacie publikować moje wypociny i liczę na Wasze konstruktywne wskazówki i rady. Podkreślam, że postawiłbym przede wszystkim na prostotę i bezpieczeństwo. Z tego względu nie chciałbym, zbytnio komplikować kodu, wręcz przeciwnie mam nadzieję, że część rzeczy można napisać prościej - jeśli coś widzicie piszcie. Prace nad skryptami są w toku, więc wiele rzeczy jest jeszcze nienapisanych. Póki co wszystko działa tak jak chce, więc tutaj problemu nie ma. Myślałem, że sam podołam wszystko napisać, jednak nie wiem zupełnie jak zabrać się m.in. za sprawę bezpieczeństwa, która jest dla mnie praktycznie pierwszorzędna. Googlowałem, googlowałem, ale nic sensownego i uporządkowanego nie znalazłem, dlatego zakładam ten temat. Mam nadzieję, że pomożecie mi w budowie, uzupełniając moją wiedzę jednocześnie. Więc zaczynam!

Na początek skrypt rejestracji. Nie potrzebne mi tutaj dużo rzeczy jedynie e-mail, login, password; reszta to pierdoły. Chciałbym abyście ocenili skrypt od strony konstrukcyjnej. Po pierwsze, liczę na wskazówki dotyczące działania i czytelności kodu, po drugie jak zabezpieczyć kod (jakich funkcji użyć):

  1. <?php session_start();
  2.  
  3. $_SESSION['error'] = NULL;
  4.  
  5. if(($_POST['email']==NULL) || ($_POST['login']==NULL) || ($_POST['password']==NULL) || ($_POST['password2']==NULL)) {
  6. $_SESSION['error']="fill in all form fields";
  7. header("Location: ../index.php"); exit;
  8. }
  9. if($_POST['password']!=$_POST['password2']) {
  10. $_SESSION['error']="password and password(x2) mismatch";
  11. header("Location: ../index.php"); exit;
  12. }
  13.  
  14. include("connect.php");
  15.  
  16. $getemail="SELECT * FROM users WHERE email='" . $_POST['email'] . "'";
  17. $_email=mysql_query($getemail, $connect);
  18. $email=mysql_fetch_assoc($_email);
  19. if($email['email'] == $_POST['email']) {
  20. $_SESSION['error']="e-mail is already used";
  21. header("Location: ../index.php"); exit;
  22. }
  23. $getlogin="SELECT * FROM users WHERE login='" . $_POST['login'] . "'";
  24. $_login=mysql_query($getlogin, $connect);
  25. $login=mysql_fetch_assoc($_login);
  26. if($login['login'] == $_POST['login']) {
  27. $_SESSION['error']="login is already used";
  28. header("Location: ../index.php"); exit;
  29. }
  30.  
  31. $register = "INSERT INTO `et`.`users`
  32. (`id`, `email`, `login`, `password`, `credits`, `active`)
  33. VALUES (NULL, '" . $_POST['email'] . "', '" . $_POST['login'] . "', '" . $_POST['password'] . "', '0', '0')";
  34. $register_query=mysql_query($register, $connect);
  35.  
  36. if($register_query == 1) {
  37. //activation mail script here//
  38. $_SESSION['error']="<br/>activation link has been sent to your e-mail address";
  39. header("Location: ../index.php"); exit;
  40. }
  41. else echo mysql_error();
  42. ?>


Ten post edytował anatman 25.07.2013, 21:09:48
Go to the top of the page
+Quote Post
dżozef
post 25.07.2013, 20:23:20
Post #2





Grupa: Zarejestrowani
Postów: 125
Pomógł: 9
Dołączył: 25.05.2013

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


1. nie używaj mysql_, zainteresuj się PDO
2. sprawdzaj zawartość $_POST przed podstawieniem (jak już będziesz używać PDO to poczytaj o bindowaniu)
3. a może obiektowo?


--------------------
Go to the top of the page
+Quote Post
anatman
post 25.07.2013, 20:42:59
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.07.2013

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


Hmmm... Sprawa wygląda tak, że uczyłem się php kawał czasu temu, a o istnieniu PDO dowiedziałem się jakieś dwie godziny temu wstydnis.gif Szkielet programu jest już praktycznie gotowy, zostawiłem na koniec bezpieczeństwo, grafikę i dopracowanie całości. Mam napisane ponad 20 skryptów i wszędzie jest mysql_ Przebudowywanie teraz wszystkiego mija się z celem, więc niestety, PDO nie wchodzi w tym projekcie w grę; tymbardziej, że wszystko działa jak należy i nie chcę mącić w kodzie. Czy proces rejestracji ma jakieś widoczne niedopracowania i jakich funkcji mam użyć i gdzie, aby zapewnić bezpieczeństwo? Gubię się w funkcjach typu htmlspecialchars(); real_escape_string(); md5(); sha1(); nie wiem jakich najlepiej użyć. Jestem totalnie zielony w sprawach bezpieczeństwa, a kategoria forum to PRZEDSZKOLE, więc proszę o konkretne, łopatologiczne odpowiedzi od kompetentnych osób, na przykładzie mojego skryptu. Dodam, że moja strona może być celem różnych ataków, więc chciałem ją dobrze zabezpieczyć.

Ten post edytował anatman 25.07.2013, 21:07:09
Go to the top of the page
+Quote Post
aras785
post 25.07.2013, 21:11:54
Post #4





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


info o błędach w sesji?

Na szybko napisałem coś takiego:
  1. <?php
  2. if(isset($_POST['register'])) {
  3. if(!empty($_POST['email']) AND !empty($_POST['login']) AND !empty($_POST['password']) AND !empty($_POST['password2'])) {
  4. if($_POST['password']==$_POST['password2']) {
  5. //laczymy sie z baza
  6. $db = new PDO('mysql:host=localhost;dbname=baza', 'user', 'password');
  7. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
  8. //zapytania
  9. $query = $db->prepare('SELECT id FROM users WHERE login=:login OR email=:email LIMIT 1--');
  10. $query->bindParam(':login',$_POST['login'],PDO::PARAM_STR);
  11. $query->bindParam(':email',$_POST['email'],PDO::PARAM_STR);
  12. $query->execute();
  13. if($query->rowCount()==0) {
  14. $query = $db->prepare('INSET INTO users(id,login,email,password) VALUES(:id,:login,:email,:password)');
  15. $query->bindValue(':id','');
  16. $query->bindParam(':login',$_POST['login'],PDO::PARAM_STR);
  17. $query->bindParam(':email',$_POST['email'],PDO::PARAM_STR);
  18. //password md5
  19. $password = md5(trim($_POST['password']));
  20. $query->bindParam(':password',$password,PDO:PARAM_STR,32);
  21. if($query->execute()) {
  22. $message_ok = 'Zarejestrowany czy coś ;)';
  23. }else $message_error = 'error';
  24. }else $message_error = 'login or password is already';
  25. }else $message_error = 'password and password(x2) mismatch';
  26. }else $message_error = 'fill in all form fields';
  27. }
nie sprawdzałem wink.gif 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 Wersja Lo-Fi Aktualny czas: 16.07.2025 - 17:13