Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Problem z Magic Quotes
CryWolf
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 9.06.2007

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


  1. <?php
  2. if (isset($_POST['acceptedreg']) AND $_POST['acceptedreg'] == 1) {
  3. if ( empty($_POST['wpisanyloginreg']) || empty($_POST['wpisanehasloreg']) || empty($_POST['wpisanyemailreg']) || empty($_POST['wpisanaplecreg']) ) { echo '<b>Nie wypełniłeś wszystkich pól!</b>'; $_POST['acceptedreg'] = 0; }
  4. else {
  5. //check open i insert open
  6.  
  7. { $wlogin = addslashes(htmlspecialchars($_POST['wpisanyloginreg']));
  8.  $whaslo = addslashes(htmlspecialchars($_POST['wpisanehasloreg'])); 
  9.  $wemail = addslashes(htmlspecialchars($_POST['wpisanyemailreg']));  }
  10. else
  11. { $wlogin = htmlspecialchars($_POST['wpisanyloginreg']);
  12.  $whaslo = htmlspecialchars($_POST['wpisanehasloreg']);
  13.  $wemail = htmlspecialchars($_POST['wpisanyemailreg']);  }
  14.  $wplec = $_POST['wpisanaplecreg'];
  15.  
  16.  
  17. $checklogin = mysql_query("SELECT id FROM users WHERE login = '$wlogin'"); 
  18. $logincheck = mysql_num_rows($checklogin);
  19. $checkemail = mysql_query("SELECT id FROM users WHERE email = '$wemail'"); 
  20. $emailcheck = mysql_num_rows($checkemail);
  21. echo '<table border="0">';
  22.  if ($logincheck == 1) { echo '<td>- Konto o takim loginie już istnieje. Wybierz inny login.</td><tr>'; }
  23.  if ($emailcheck == 1) { echo '<td>- Konto o takim emailu już istnieje. Wpisz inny email.</td>'; }
  24. if ($logincheck == 1 OR $emailcheck == 1) { echo '<meta http-equiv="refresh" content="5;url=rejestracja.php"/>'; } else 
  25.  
  26. { 
  27. $databaza= date('H:i/d/m/y');
  28. mysql_query("INSERT INTO users VALUES ('','$wlogin','$whaslo', '$wemail', '$wplec', 'n$databaza', '0')");
  29. echo "Zostałeś poprawnie zarejestrowany!<br>Twoje hasło to: <b>$whaslo</b>.<br>Możesz się zalogować w formularzu u góry."; 
  30. }
  31.  
  32. echo '</table>';
  33. //check close i insert close
  34. }
  35. }
  36.  
  37. if (!isset($_POST['acceptedreg']) || $_POST['acceptedreg'] == 0) {
  38.  echo '<table border="0"><form method="POST"> 
  39.  <td width="120"> Login:</td><td width="90"><input type="text" name="wpisanyloginreg" maxlength="10"> </td><tr>
  40.  <td> Hasło:</td><td><input type="text" name="wpisanehasloreg" maxlength="10"> </td><tr>
  41.  <td> Email:</td><td><input type="text" name="wpisanyemailreg" maxlength="25"> </td><tr>
  42.  <td> Płeć:</td><td><select name="wpisanaplecreg"> 
  43.  <option value="1">Kobieta</option>
  44.  <option value="2">Mężczyzna</option>
  45.  <input type="hidden" name="acceptedreg" value="1"> </td><tr>
  46.  <td colspan="2"><center><input type="submit" value="Zarejestruj"><h5>*Po przyciśnięciu "Zarejestruj"<br>wyświetli się Twoje hasło!</h5></td>
  47.  
  48. </form></table>'; 
  49. }
  50. ?>


Jest to mój skrypt rejestracji. Wszystko działa jak należy, nie ma błędów itp. Chodzi tylko o to, że nie wiem czy dobrze zrobione są te magic quotesy. Wpiszę w login i pass np. haslo'' to potem po kliknięciu Submita jest napisane, że Twoje hasło to: haslo\'\' i tak chyba powinno to wyglądać, ale po chwili dodawane jest to do bazy i tam dodaje się jako haslo'' bez tych backslashów. Następnie przy zalogowaniu jak wpiszę haslo'' to mnie zaloguje. Login i Pass oczywiście są takie same. Tak więc nie wiem jak zrobić aby to naprawić. Ktoś wpisze to coś od sql injection w rejestracji a potem przy logowaniu skrypt nie zabezpieczy się tymi addslashami czy coś, przynajmniej ja tak to widzę. Z góry dzięki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Maxik
post
Post #2





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


stripslashes wywala backslashe, jeśli o to Ci chodzi.

Ten post edytował Maxik 12.07.2008, 14:35:17
Go to the top of the page
+Quote Post
Shili
post
Post #3





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Bo to o to chodzi. Najkrócej:

przy dodawaniu do bazy php dodaje slashe, żeby sama baza wiedziała, że te znaki należy traktować jako tekst, nie jako znak specjalny. Baza "widzi" tam kawałek tekstu '. Więc go dodaje, backslashy "nie widzi" bo one są tylko po to, żeby ze znaku specjalnego zrobić tekst.
Go to the top of the page
+Quote Post

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: 23.08.2025 - 02:04