Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] czy to bezpieczne odrazu podać w $_SESSION['user'], nazwę użytkownika zamiast wartości zmiennej?
hiszpanespaniol
post
Post #1





Grupa: Zarejestrowani
Postów: 213
Pomógł: 39
Dołączył: 7.04.2008
Skąd: 3city

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


zalogować może się tylko jeden użytkownik i tylko z jednym hasłem. bez możliwości zmiany tych parametrów (ja je ustawiam raz na zawsze). Nie chcę więc tworzyć osobnego pliku z tymi parametrami (szyfrowanymi lub nie).

Pytanie brzmi, czy bezpiecznie jest zrobić taki skrypt?

  1. <?php
  2. if (isset($_SESSION['kim_jestem']) && $_SESSION['kim_jestem'] == jasio) {
  3. echo "
  4.  zalogowany jako " .$_SESSION['kim_jestem']. "<br> <a href=\"wyloguj.php\">wyloguj</a>
  5. ";
  6. }
  7. else
  8. {
  9. header("Location:logowanie.php");
  10. }
  11. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Trochę bezpieczniej było by porównywać hashe:
  1. <?
  2. if(md5($_SESSION['kim_jestem']) == '4ea19358f71379f9bd8fe8e1708812fc') //4ea19358f71379f9bd8fe8e1708812fc = md5('jasio')
  3. ?>
Go to the top of the page
+Quote Post
hiszpanespaniol
post
Post #3





Grupa: Zarejestrowani
Postów: 213
Pomógł: 39
Dołączył: 7.04.2008
Skąd: 3city

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


wiem, że "trochę". bo skoro ktoś już się pomęczy i JAKIMŚ CUDEM dostanie ten mój kod PHP w swoje ręce, to bez problemu odkoduje sobie zakodowany nick za pomocą jakiegoś dekodera online albo własnego. Skoro więc to możliwe (zakładając że jakoś dostanie mój PHP), to po co mam sobie utrudniać sprawę jeśli itak nie zwiększa to bezpieczeństwa.

Pytanie z tematu nadal więc pozostaje
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Bo jeżeli hasło jest bezpieczne (czyt.: długie, zawiera litery (duże i małe), cyfry, znaki) to "złamanie" go brute-forcem może potrwać na tyle długo, że potencialny "włamywacz" zrezygnuje. Ale z drugiej strony - mając dostęp do pliku, będzie mieć prawdopodobnie dostęp do zapisu i sobie poprostu zmieni to hasło (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
hiszpanespaniol
post
Post #5





Grupa: Zarejestrowani
Postów: 213
Pomógł: 39
Dołączył: 7.04.2008
Skąd: 3city

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


nadal nie wiem, czy takie rozwiązanie (to z tematu) jest bezpieczne. już nie chodzi mi o to co jest bezpieczniejsze, ale jedynie o to czy to konkretnie jest bezpieczne. Taka sytuacja, ze ktoś dostanie kod php jest dosyć skrajna i właściwie łamie wszelkie możliwości zabezpieczania. Drugą możliwością jaką dla siebie widzę, jest umieszczenie hasła i loginu w osobnym skrypcie o poziom wyżej niż public_html. ale właśnie takiego umieszczania chciałem uniknąć.
Go to the top of the page
+Quote Post
.radex
post
Post #6





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


nazwę usera możesz podać bez haszowania, ale pod warunkiem, że masz zahaszowane inne dane w sesji, które udowodnią własność konta.
Go to the top of the page
+Quote Post
hiszpanespaniol
post
Post #7





Grupa: Zarejestrowani
Postów: 213
Pomógł: 39
Dołączył: 7.04.2008
Skąd: 3city

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


z tej rozmowy wnioskuję:

to rozwiązanie JEST bezpieczne, ale z szyfrowaniem (np algorytmem MD5).

Dziękuję i pozdrawiam, problem rozwiązany...
Go to the top of the page
+Quote Post
.radex
post
Post #8





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


MD5 nie szyfruje, tylko haszuje.

MD5 nie można odszyfrować.

Ten post edytował radex_p 23.05.2008, 10:36:21
Go to the top of the page
+Quote Post
hiszpanespaniol
post
Post #9





Grupa: Zarejestrowani
Postów: 213
Pomógł: 39
Dołączył: 7.04.2008
Skąd: 3city

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


no to świetnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) czyli właściwie mając nawet ten ciąg:

  1. <?php
  2. 4ea19358f71379f9bd8fe8e1708812fc
  3. ?>


który jest zahaszowanym hasłem, ewentualnemu cracker'owi nie uda się szybko odgadnąć że to "jasio". w skrypcie "zalogowaność" sprawdzam więc tak:

  1. <?php
  2. if (isset($_SESSION['kim_jestem']) && md5($_SESSION['kim_jestem']) == '4ea19358f71379f9bd8fe8e1708812fc')
  3. {
  4. echo "<b>Witaj: </b>".$_SESSION['user'];
  5. }
  6. ?>


Niema w moim przypadku potrzeby zapisu danych gdziekolwiek oprócz wnętrza skryptu, a nawet tam "jasio" (czyli hasło) jest haszowany. Jak widać w kodzie powyżej "kim_jestem" nie jest loginem. Jest hasłem. Zrobiłem tak dlatego, ze login wyskakiwał w formularzu logowania po kliknięciu w puste pole (podpowiedź przeglądarki), z hasłem się tak nie dzieje. Teraz już jest bezpiecznie (md5 hasła służy do weryfikacji bycia zalogowanym).
Poprawcie mnie jeśli popełniam jakiś ideologiczny błąd typu "nigdy nie weryfikuj za pomocą hasła"
Go to the top of the page
+Quote Post
pyro
post
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(hiszpanespaniol @ 22.05.2008, 23:58:02 ) *
zalogować może się tylko jeden użytkownik i tylko z jednym hasłem. bez możliwości zmiany tych parametrów (ja je ustawiam raz na zawsze). Nie chcę więc tworzyć osobnego pliku z tymi parametrami (szyfrowanymi lub nie).

Pytanie brzmi, czy bezpiecznie jest zrobić taki skrypt?

  1. <?php
  2. if (isset($_SESSION['kim_jestem']) && $_SESSION['kim_jestem'] == jasio) {
  3. echo &#092;"
  4.  zalogowany jako &#092;" .$_SESSION['kim_jestem']. \"
  5.  <a href=&#092;"wyloguj.php\">wyloguj
  6. &#092;";
  7. }
  8. else
  9. {
  10. header(&#092;"Location:logowanie.php\");
  11. }
  12. ?>



zrobiles male bledy...
</a href=\"wyloguj.php\">
  1. <?php
  2. if (
  3. // {to nie jest potrzebne} isset($_SESSION['kim_jestem']) && 
  4. $_SESSION['kim_jestem'] == 'jasio') { // nie dales cudzyslowow do jasio
  5. // a co z haslem?
  6. echo "
  7.  zalogowany jako " .htmlspecialchars($_SESSION['kim_jestem']). " // dodalem htmlspecialchars, z pwoodu mozliwosci ataku XSS
  8.  wyloguj
  9. ";
  10. }
  11. else
  12. {
  13. header("Location:logowanie.php");
  14. }
  15. ?>
  16. // uzywanie md5 nie jest tu potrzebne, to jest bezpieczne

<a href=\"wyloguj.php\">
</a href=\"wyloguj.php\">

Ten post edytował pyro 23.05.2008, 14:28:18
Go to the top of the page
+Quote Post
.radex
post
Post #11





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


jest ok. Ja generalnie robię to podobnie:

jedna sesja z nazwą usera
i druga sesja ze specjalnie spreparowanym tekstem, który udowadnia tożsamość. Tym tekstem może być właśnie hasło.
Go to the top of the page
+Quote Post
hiszpanespaniol
post
Post #12





Grupa: Zarejestrowani
Postów: 213
Pomógł: 39
Dołączył: 7.04.2008
Skąd: 3city

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


to ja może podam całość jaką teraz mam, żeby nie było wątpliwości czemu sprawdzam tylko jedną wartość:

to jest formularz logowania HTML (plik index.php):

  1. <?php
  2. if (isset($_SESSION['kim_jestem']) && md5($_SESSION['kim_jestem']) == '4ea19358f71379f9bd8fe8e1708812fc')
  3. {
  4. echo "<b>Witaj człowieku: </b><br>\n<a href=\"logout.php\">Wyloguj się</a><br>\n<a href=\"zalogowany.php\">Twoja strona</a>";
  5. }
  6. else{
  7. echo "
  8. <form method=\"POST\" action=\"sprawdz.php\">
  9. <table>
  10. <tr><th align=\"right\">Login:</th><td align=\"left\"><input type=\"text\" name=\"login\"></td></tr>
  11. <tr><th align=\"right\">Hasło:</th><td align=\"left\"><input type=\"password\" name=\"haslo\"></td></tr>
  12. <tr><td align=\"center\" colspan=\"2\"><input type=\"submit\" value=\"loguj\" name=\"logowanie\"></td></tr>
  13. </table>
  14. </form>
  15. ";
  16. }
  17. ?>


Taki skrypt sprawdza formularz logowania (jest to plik sprawdz.php)

  1. <?php
  2. if($_POST['logowanie']){
  3. $pobrany_login = htmlspecialchars($_POST['login']);
  4. $pobrane_haslo = htmlspecialchars($_POST['haslo']);
  5. if($pobrany_login == 'jasio' && md5($pobrane_haslo) == '4ea19358f71379f9bd8fe8e1708812fc'){
  6. $_SESSION['kim_jestem'] = md5($pobrane_haslo);
  7. header("Location:zalogowany.php");
  8. }
  9. else{
  10. header("Location:index.php");
  11. }
  12. }
  13. else{
  14. header("Location:index.php");
  15. }
  16. ?>


a tak wygląda dowolna strona dostępna tylko po zalogowaniu (startowa to zalogowany.php):

  1. <?php
  2. if (isset($_SESSION['kim_jestem']) && md5($_SESSION['kim_jestem']) == '4ea19358f71379f9bd8fe8e1708812fc') {
  3. echo "
  4. jesteś zalogowany. Tutaj możesz sobie zmieniać swoje wpisy<br> <a href=\"logout.php\">wyloguj</a>
  5. ";
  6. }
  7. else
  8. {
  9. header("Location:index.php");
  10. }
  11. ?>


ostatni plik który wyloguje użytkownika (logout.php):

  1. <?php
  2. if (isset($_SESSION['kim_jestem']))
  3. {
  4. echo "zostałeś wylogowany<br>";
  5. echo "<a href=\"index.php\">Strona Główna</a>";
  6. }
  7. else{
  8. header("Location:index.php");
  9. }
  10. ?>


"a co z hasłem?"
jak widać w pliku zalogowany.php sprawdzam tylko jedną wartośc. a to dlatego, że jest ona tworzona w pliku sprawdz.php jedynie kiedy zgadza się i login i hasło (narazie są jednakowe).
co do tego, że niepotrzenie sprawdzam, czy $_SESSION['kim_jestem'] w ogóle jest zdefiniowana, to czytałem gdzies, ze PHP inaczej zareaguje w przypadku jedynie sprawdzania wartości, a inaczej w przypadku sprawdzania i istnienia i wartości. Nie pamiętam tego, ale coś mi się kojarzy z jakimś E_NOTICE.

teraz już widac całość tej strony mojej. Nigdzie niema hasła odkrytego.
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 - 04:49