Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zmiana praw użytkowników
Forum PHP.pl > Forum > Przedszkole
questr
Formularz rejestracyjny na mojej stronie łączy się z bazą danych poprzez stworzone przeze mnie konto w phpmyadmin. To konto ma wyłączone wszystkie opcje jakie tylko były. Chciałbym jakoś zabezpieczyć rejestrację tak aby inni użytkownicy nie mogli podglądać innych danych niż swoje. Póki co każdy może zobaczyć ilu jest userów, jakie mają loginy i hasła zakodowane w md5. Jak mogę jakoś ukryć te dane?
lord2105
pokaz skrypt?
questr
Skrypt rejestracji:
  1. <?php
  2. include "conn.inc.php";
  3. ?>
  4. <html>
  5. <head>
  6. <title>PHP5, Apache i MySQL</title>
  7. </head>
  8. <body>
  9. <?php
  10. if (isset($_POST['submit']) && $_POST['submit'] == "Zarejestruj") {
  11. if ($_POST['username'] != "" &&
  12. $_POST['password'] != "" &&
  13. $_POST['first_name'] != "" &&
  14. $_POST['last_name'] != "" &&
  15. $_POST['email'] != "") {
  16.  
  17. $query = "SELECT username FROM user_info " .
  18. "WHERE username = '" . $_POST['username'] . "';";
  19. $result = mysql_query($query)
  20.  
  21. if (mysql_num_rows($result) != 0) {
  22. ?>
  23. <p>
  24. <font color="#FF0000"><b>Nazwa użytkownika
  25. <?php echo $_POST['username']; ?> jest już używana. Proszę wybrać
  26. inną!</b></font>
  27. <form action="register.php" method="post">
  28. Nazwa użytkownika: <input type="text" name="username"><br>
  29. Hasło: <input type="password" name="password"
  30. value="<?php echo $_POST['password']; ?>"><br>
  31. Adres email: <input type="text" name="email"
  32. value="<?php echo $_POST['email']; ?>"><br>
  33. Imię: <input type="text" name="first_name"
  34. value="<?php echo $_POST['first_name']; ?>"><br>
  35. Nazwisko: <input type="text" name="last_name"
  36. value="<?php echo $_POST['last_name']; ?>"><br>
  37. Miasto: <input type="text" name="city"
  38. value="<?php echo $_POST['city']; ?>"><br>
  39. Województwo: <input type="text" name="state"
  40. value="<?php echo $_POST['state']; ?>"><br><br>
  41.  
  42. <input type="submit" name="submit" value="Zarejestruj"> &nbsp;
  43. <input type="reset" value="Wyczysć">
  44. </form>
  45. </p>
  46. <?php
  47. } else {
  48. $query = "INSERT INTO user_info (username, password, email, " .
  49. "first_name, last_name, city, state) " .
  50. "VALUES ('" . $_POST['username'] . "', " .
  51. "(PASSWORD('" . $_POST['password'] . "')), '" .
  52. $_POST['email'] . "', '" . $_POST['first_name'] .
  53. "', '" . $_POST['last_name'] . "', '" . $_POST['city'] .
  54. "', '" . $_POST['state'] . "');";
  55. $result = mysql_query($query)
  56. $_SESSION['user_logged'] = $_POST['username'];
  57. $_SESSION['user_password'] = $_POST['password'];
  58. ?>
  59. <p>
  60. Dziękujemy, <?php echo $_POST['first_name'] . " " .
  61. $_POST['last_name']; ?>, za zarejestrowanie się!<br>
  62. <?php
  63. header("Refresh: 5; URL=index.php");
  64. echo "Zakończono proces rejestracji! " .
  65. "Zostaniesz przeniesiony do oryginalnej storny!<br>";
  66. echo "(Jesli przeglądarka nie obsługuje przekierowań, " .
  67. "<a href=\"index.php\">kliknij tutaj</a>)";
  68. die();
  69. }
  70. } else {
  71. ?>
  72. <p>
  73. <font color="#FF0000"><b>Wymagane jest podanie nazwy użytkownika, hasła,
  74. adresu email, imienia i nazwiska!</b></font>
  75. <form action="register.php" method="post">
  76. Nazwa użytkownika: <input type="text" name="username"
  77. value="<?php echo $_POST['username']; ?>"><br>
  78. Hasło: <input type="password" name="password"
  79. value="<?php echo $_POST['password']; ?>"><br>
  80. Adres email: <input type="text" name="email"
  81. value="<?php echo $_POST['email']; ?>"><br>
  82. Imię: <input type="text" name="first_name"
  83. value="<?php echo $_POST['first_name']; ?>"><br>
  84. Nazwisko: <input type="text" name="last_name"
  85. value="<?php echo $_POST['last_name']; ?>"><br>
  86. Miasto: <input type="text" name="city"
  87. value="<?php echo $_POST['city']; ?>"><br>
  88. Województwo: <input type="text" name="state"
  89. value="<?php echo $_POST['state']; ?>"><br>
  90. <br>
  91. <input type="submit" name="submit" value="Zarejestruj"> &nbsp;
  92. <input type="reset" value="Wyczysć">
  93. </form>
  94. </p>
  95. <?php
  96. }
  97. } else {
  98. ?>
  99. <p>
  100. Witamy na stronie rejestracji!<br>
  101. Wymagamy wypełenienia pól nazwy użytkownika, hasła, adresu email,
  102. imienia i nazwiska!
  103. <form action="register.php" method="post">
  104. Nazwa użytkownika: <input type="text" name="username"><br>
  105. Hasło: <input type="password" name="password"><br>
  106. Adres email: <input type="text" name="email"><br>
  107. Imię: <input type="text" name="first_name"><br>
  108. Nazwisko: <input type="text" name="last_name"><br>
  109. Miasto: <input type="text" name="city"><br>
  110. Województwo: <input type="text" name="state"><br>
  111. <br>
  112. <input type="submit" name="submit" value="Zarejestruj"> &nbsp;
  113. <input type="reset" value="Wyczysć">
  114. </form>
  115. </p>
  116. <?php
  117. }
  118. ?>
  119. </body>
  120. </html>



conn.inc
  1. <?php
  2. $conn = mysql_connect("localhost", "user", "haslo")
  3. $db = mysql_select_db("baza")//nazwa bazy danych
  4. ?>

Mephistofeles
Cytat
Póki co każdy może zobaczyć ilu jest userów, jakie mają loginy i hasła zakodowane w md5. J

Dopuszczasz bezpośredni dostęp do bazy? Nikt tego nie zobaczy dopóki mu na to (świadomie lub nie) nie pozwolisz.
Można dla każdego tworzyć osobnego użytkownika MySQL, ale to zazwyczaj nie ma sensu i się do niczego nie przydaje.
CuteOne
Hee? ale w tym formularzu nie wysyłasz danych z bazy do formularza [i ogólnie do przeglądarki], więc powiedz mi w jaki sposób ktoś miałby wyświetlić dane innych użytkowników?

No chyba, że mowa o zabezpieczeniach i hackowaniu bazy... ale to już inna bajka - którą polecam przeczytać bo twój skrypt to jedna wielka dziura smile.gif
Mephistofeles
Skorzystaj z PDO i prepared statements, bo faktycznie nie masz żadnej ochrony przed SQL Injection.
questr
Do zabezpieczenia tego jeszcze długa droga, ale jeśli ktoś w pliku conn.inc ma bezpośrednio login i hasło do bazy to nie będzie mógł odczytać danych zawartych w bazie? (Wydaje mi się, że drzwi stoją przed nim otworem)
Co do SQL Injection...
Chciałem to później zrobić. Tzn. Najpierw zrobić porządek z bazą i formularzem, a następnie to zabezpieczyć. Oczywiście możecie coś zasugerować do przeczytania jak to dokładnie zrobić tak aby nie było wielu luk smile.gif
Mephistofeles
A niby jak ma uzyskać dostęp do tych danych? Jedynie przez błędy w skrypcie może, czyli od razu zajmij się SQL Injection.
CuteOne
1. Zabezpiecz zapytania używając mysql_real_escape_string() lub jak już ktoś wcześniej napisał prepared statements.
2. Wyświetlanie danych, które pośrednio pochodzą od użytkownika zabezpieczaj używając htmlspecialchars()
3. Odpowiednia konfiguracja php.ini [to zostaw na koniec winksmiley.jpg]
4. Zabezpieczenia sesji [dużo o tym na necie]
5. Zabezpieczenia przed wywołaniem plików bezpośrednio w przeglądarce [np. http://www.example.com/modules/rejestracja...acja_finish.php]

Na necie jest sporo artów opisujących różne techniki zabezpieczeń wystarczy poszukać smile.gif
questr
Dzięki wielkie
W takim układzie zabieram się za zabezpieczanie smile.gif
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.