Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczenstwo kodu
no_face
post
Post #1





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Witam Was.

Mam oto takie pytanie. Glownie chodzi mi o bezpieczenstwo.
Wymyslilem taki oto sposob uwierzytelniania i chcialbym sie dowiedziec czy jest bezpieczny i nie kryje w sobie jakis bonusow.

1. Dostaje z formularza nick i pass.
2. Wybieram z bazy haslo dla podanego w formularzu nicku i jeszcze raz nick (co jest raczej zbedne).
3. Sprawdzam czy podane dane z formularza pasuja do danych wyciagnietych z bazy.

Oto cala filozofia. Martwi mnie punkt 2. Czy jest to bezpieczne rozwiazanie, prosze o porade.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
zombie
post
Post #2





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


Chyba nie do końca rozumiem, ale zdecydowanie niebezpieczne (acz praktykowane co widać po przypominaczach haseł) jest przechowywanie w bazie niezahashowanego hasła. Hasło powinno być przynajmniej zahashowane przez md5" title="Zobacz w manualu php" target="_manual

ad.2 oczywiście, że jest zbędne, skoro nick jest już w zapytaniu


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
no_face
post
Post #3





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Co do hasel to oczywiscie ze sa zahaszowane sha1(); postawione sesje itd. Moze zadam pytanie inaczej. Czy sposob w jaki uwierzytelniam usera jest bezpieczny czy tez nie. Sam aspekt wybierania hasla (zahaszowane) z bazy dla nazwy nicka z formularza logowania i porownanie go z haslem podanym przez logujacego sie usera.

Czyli,
1. loguje sie user: jakis_user
2. podaje haslo
3. ja szukam podanego loginu w bazie
4. jezeli jest wyciagam pass dla tego loginu
5. porownuje haslo podane przy logowaniu z haslem wyciagnietym z bazy
6. itd

Czy ten sposob jest bezpieczny?

Moze troche kodu
  1. <?php
  2.  
  3. //polaczenie z baza itd
  4.  
  5. $user_f = $_POST['user_f']; // dane z formularza
  6. $pass_f = $_POST['pass_f']; // jw.
  7.  
  8. $sql = mysql_fetch_assoc(mysql_query("select * from jakas_tabelka where user = '$user_f'", $conn));
  9. $user = $sql['user']; // nie czepiac sie :)
  10. $pass = $sql['pass']; // wyciagam haslo dla podanego nicka z formularza
  11.  
  12. if (($user_f == $user) && (sha1($pass_f) == $pass)) // sprawdzenie itd.
  13. {
  14.  jest dostep
  15. }
  16. else
  17. {
  18.  brak dostepu dane sa nieprawidlowe
  19. }
  20.  
  21. ?>
Go to the top of the page
+Quote Post
zombie
post
Post #4





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


wystarczy przecież:
  1. <?php
  2. $result = mysql_query("SELECT jakakolwiek_kolumna_tabeli FROM nazwa_tabeli WHERE pass='".sha1($_POST['pass_f'])."' AND user = '".$_POST['user_f']."'");
  3. if (mysql_num_rows($result) > 0){
  4. // autoryzacja
  5. } else {
  6. // nie ma bata!
  7. }
  8. ?>
... dlaczego ma być niebezpieczy? 100% pewności nie ma ... nawet w prezerwatywie winksmiley.jpg


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
number0
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 12.03.2004
Skąd: Warszawa

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


Cytat(zombie @ 2005-08-13 00:06:47)
if (mysql_num_rows($result) > 0){
// autoryzacja
} else {
// nie ma bata!
}

bład autoryzacja powinna nastąpić
tylko gdy zostanie zwrucony tylko 1 rekord

Poprawny kod
  1. <?php
  2.  
  3.  
  4. // filtrowanie danych
  5. $user_f = mysql_escape_string($user_f );
  6. $pass_f = mysql_escape_string($pass_f );
  7.  
  8. $sql = "SELECT COUNT(*) AS num_users
  9.  FROM " . USER_TABLE . "
  10.  WHERE
  11.  " . USER_TABLE_LOGIN . "='$user_f' AND
  12.  " . USER_TABLE_PASSW . "='$pass_f'";
  13.  
  14. $result = $this->db->query($sql);
  15. $row = $result->fetch();
  16.  
  17. if ($row['num_users'] != 1) {
  18. // brak autoryzacji
  19. } else {
  20. //autoryzacja
  21. }
  22. ?>


--------------------
„Bardzo zaawansowana technologia niewiele różni się od magii”
Arthur C. Clarke
Go to the top of the page
+Quote Post
no_face
post
Post #6





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Przepraszam ze dopiero po tak dlugim okresie sie odzywam.
Co do autoryzacji to raczej zwroci tylko jeden rekord, a to z powodu tego ze przy rejestracji skrypt sprawdza czy istnieje dany user w bazie, dlatego tez zawsze zwroci tylko jeden rekord.

number0, jak narazie Twoj kod dla mnie nie jest jeszcze w calosci zrozomily.

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 Aktualny czas: 19.08.2025 - 18:37