Ogłoszenie


Zapraszam serdecznie na strone DARMOWYCH FILMÓW I SERIALI. Każdy znajdzie coś dla siebie. Mam w bazie artykuły dot. webmasteringu, hackeringu i wiele wiele innych. Dodatkowo forum :) Nie czekaj zarejestruj się już dziś : www.Ogladamy.xorg.pl

  • Index
  •  » Kursy
  •  » Profesjonalne zabezpieczenie hasłem

#1 2008-09-29 12:54:23

RedEagle

Admin

status RedEagle
891470
Zarejestrowany: 2008-09-04
Posty: 1047
Komputer: Windows XP
Gra: GTA VC
Książka: Jim C.Hines-,,Zadanie Goblina"
Muzyka: Green Day

Profesjonalne zabezpieczenie hasłem

Tworząc różne panele administratora jesteśmy narażeni na różne ataki osób ciekawskich. W tej lekcji dowiesz się, jak zakodować hasło i, jak obronić się przed potencjalnym atakiem.

Dowiesz się także jak udostępnić tą stronę sobie - administratorowi, a także innym osobom znającym login pasujący do danego hasła - redaktorom.

Kodowanie md5

Do kodowania znaków służy funkcja md5, która wprowadzony tekst zakoduje używając 256-bitowego ciągu znaków, tzn. wprowadzoną frazę zamieni na 32 znaki. Aby zobaczyć jak wygląda przykładowe hasło zakodowane algorytmem md5 wystarczy użyć prostego kodu:

<?php

$tekst = md5("asdf");

echo "$tekst";

?>

W wyniku powinniśmy ujrzeć 912ec803b2ce49e4a541068d495ab570.

Uwaga: przy kodowaniu znaku wielkość liter ma znaczenie, oczywiście można używać także cyfr i znaków specjalnych, a także znaków polskich. Nawet maciupka zmiana w macierzystym, w naszym przypadku tekście powoduje ogromne zmiany w szyfrowaniu, dla przykładu fraza Asdf będzie widoczna w postaci a25fda70d4a94ee66872cf8194243a70.

Uwaga: do kodowania używane są wyłącznie cyfry i małe litery w różnych proporcjach.


Prosty formularz logowania


Najciekawsze jest to, że wcale nie musimy dekodować hasła, aby ujrzeć stronę. Wystarczy powyższy ciąg znaków przypisać np. instrukcji warunkowej, która będzie sprawdzać, czy tak samo są zakodowane dane z formularza. Jeżeli jakiemuś spryciarzowi udałoby się uzyskać dostęp do hasła (zakodowanego), to i tak, aby dostał się na określoną podstronę musi je dekodować (ponieważ skrypt, którego kod ujrzymy zakodowałby je ponownie i warunek nie byłby spełniony).

Oto przykład prostego kodu, wyświetlającego komunikat zgodny z wypełnieniem pola formularza (hasło: asdf):

<?php

if (md5($_POST[haslo]) == "912ec803b2ce49e4a541068d495ab570")

{ echo "Hasło poprawne";

// tutaj możesz umieścić kod jakiegoś panelu admina itp.

}

else if ($_POST[haslo] == TRUE)

{ echo "Hasło niepoprawne<br />

<A HREF=\"java script:history.back();\">Wstecz</A>";

// tutaj możesz umieścić później poznane funkcje, które

// mogą powiadamiać admina o próbach włamania

}

else {

echo "<FORM ACTION=\"index.php\" METHOD=\"post\">

Zaloguj się, wpisz hasło:<br />

<INPUT TYPE=\"tekst\" NAME=\"haslo\"><br />

<INPUT TYPE=\"submit\" VALUE=\"Zaloguj mnie\">

</FORM>";

}

?>

Oczywiście można dobezpieczyć to dodając miejsce na login, a także rozszerzyć instrukcję, która pozwoli na wprowadzenie większej ilości haseł np. dla redaktorów i innych współpracowników. To zostawiam Twojej inwencji, a ja przechodzę do kolejnego tematu.

Uwaga: warto polom formularza pozwalającym na przechowanie tekstu przypisać atrybut MAXLENGTH, którego wartość będzie oznaczać maksimum wprowadzonych znaków.


Zmodyfikowany formularz


Często wprowadzamy swoje loginy i/lub hasła wielkimi literami, zwykle przez przypadek np. włączony jest przycisk Caps Lock, lub niechcący nasz palec utknął na Shiftcie. Za pomocą funkcji strtolower() możemy wszystkie wielkie litery zamienić na małe, pozostawiając wszystkie inne znaki bez zmian. Oto przykład powyższego kodu z zastosowaniem tej oto funkcji:

<?php

$haslo = strtolower($_POST[haslo]);

if (md5($haslo) == "912ec803b2ce49e4a541068d495ab570")

{ echo "Hasło poprawne";

// tutaj możesz umieścić kod jakiegoś panelu admina itp.

}

else if ($haslo == TRUE)

{ echo "Hasło niepoprawne<br />

<A HREF=\"java script:history.back();\">Wstecz</A>";

// tutaj możesz umieścić później poznane funkcje, które

// mogą powiadamiać admina o próbach włamania

}

else {

echo "<FORM ACTION=\"index.php\" METHOD=\"post\">

Zaloguj się, wpisz hasło:<br />

<INPUT TYPE=\"tekst\" NAME=\"haslo\"><br />

<INPUT TYPE=\"submit\" VALUE=\"Zaloguj mnie\">

</FORM>";

}

?>

W powyższym kodzie pojawiła się zmienna, której wartością jest przerobiona – zminimalizowana wartość zmiennej o takiej samej nazwie wysłanej przez formularz. Teraz takie hasła:

asdf
ASDF
asDF
AsDf

będą poprawne, oczywiście pomijając wielokropek :).

Uwaga: możemy też postąpić działalność odwrotnie, używając funkcji strtoupper(), która zamieni wszystkie małe litery na wielkie, pozostawiając pozostałe znaki bez zmian. Uważam, że funkcja nie ma zbytnio ciekawego zastosowania w praktyce.

Uwaga: funkcje strtolower(), strtoupper() nie służą bezpieczeństwu, tylko wygodzie osób znających hasło.

Są sposoby, nie wiem jakie, ale zawsze jakieś są, że wpisując pewien ciąg do danego pola, możemy ujrzeć coś więcej niż przewidział administrator. Na początku poznajmy instrukcje warunkową, która dopuści do sprawdzania hasła, tylko wtedy, jeżeli zmienna wysyłana przez formularz będzie składała się z wcześniej ustalonych znaków. Jest to tzw. funkcja ereg, której przypisujemy nie tylko konkretne znaki, ale całe ich przedziały.

<?php

if (md5($_POST[haslo]) == "912ec803b2ce49e4a541068d495ab570" && ereg("^[0-9A-Za-z\._\-]+$",$_POST[haslo]))

{ echo "Hasło poprawne";

// tutaj możesz umieścić kod jakiegoś panelu admina itp.

}

else if ($_POST[haslo] == TRUE)

{ echo "Hasło niepoprawne<br />

<A HREF=\"java script:history.back();\">Wstecz</A>";

// tutaj możesz umieścić później poznane funkcje, które

// mogą powiadamiać admina o próbach włamania

}

else {

echo "<FORM ACTION=\"index.php\" METHOD=\"post\">

Zaloguj się, wpisz hasło:<br />

<INPUT TYPE=\"tekst\" NAME=\"haslo\"><br />

<INPUT TYPE=\"submit\" VALUE=\"Zaloguj mnie\">

</FORM>";

}

?>

Oprócz samego definiowania przedziałów znaków warto zabezpieczyć się przed tagami w haśle – wykorzystanie ich w sprytny sposób może pozbawić naszą wyłączność nad kontrolą nad skryptem, czy całą witryną. Funkcja strip_tags usunie:

znaki < i >
wszystkie znaki na prawo od <*
wszystkie znaki na lewo od >*

Uwaga: pozycje z gwiazdką oznaczają, że zostaną usunięte wszystkie znaczki w określoną stronę, chyba, że wcześniej napotkają przeciwny tag.


http://i37.tinypic.com/sbm42f.png
http://i38.tinypic.com/29x82na.png

Offline

 
  • Index
  •  » Kursy
  •  » Profesjonalne zabezpieczenie hasłem

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora