[PHP] bezpieczeństwo hasła

0

Mam pytanie, jeżeli z jednego pliki przekaże metodą POST zmienną z hasłem, w drugim sprawdzę ja zwykłym ifem

if($_POST['haslo']=='blablabla')
{
//formularz
}
else
{
echo("Błędne hasło");
}

to mogę się czuć w miarę bezpiecznie o to że nikt mi się nie włamie (oczywiście nie zabezpiecza to przed zgadnięciem hasła ;-) )?

0

jesli bedziesz mial w plik uzapisane haslo tak po prostu 'blabla' to zaden problem. najlepiej jakos se zakoduj. np w md5() a późiej podane przez logującego hasło tez zakoduj w md5 i porównaj kody.

0

jesli bedziesz mial w plik uzapisane haslo tak po prostu 'blabla' to zaden problem. najlepiej jakos se zakoduj. np w md5() a późiej podane przez logującego hasło tez zakoduj w md5 i porównaj kody.

Po co, z czegos takiego nie da sie wyciagnac hasla.

Cos takiego jak jest powyzej wystarczy, problemem moze byc sam POST, ale na to juz trzeba szyfrowane polaczenie.

0

oj da się, da

wystarczy, że serwerek będzie fajnie skonfigurowany, hehe, a tak zwykle jest.
Załóżmy, że dzieje się to na shellu. Plik PHP aby mógł być wykonany to musi mieć prawo do odczytu dla wszystkich użytkowników. Tak więc dużo nie trzeba.

0

Tez polecam MD5. Choc MD5 wlasciwie tez niezbyt dobrze chroni, bo co to za problem zapuscic maly klasterek na 2 nocki. Najlepiej MD5 + dobrze skonfigurowany serwerek (zeby jednak nikomu sie nie udalo z zewn. dostac do pliku z MD5), albo jeszcze lepiej MD5 + CGI. Kiedys pytalem na tym forum jak zabezpieczyc w kodzie PHP haslo do bazy danych i niestety ookazalo sie, ze jedynym ratunkiem jest napisac skrypty w CGI.... :(

0

oj da się, da

wystarczy, że serwerek będzie fajnie skonfigurowany, hehe, a tak zwykle jest.
Załóżmy, że dzieje się to na shellu. Plik PHP aby mógł być wykonany to musi mieć prawo do odczytu dla wszystkich użytkowników. Tak więc dużo nie trzeba.

Np? Przeciez apache (czy co tam sie ma) jest jedynym laczem miedzy plikiem a swiatem, a zeby ten zostal wyslany musi zostac najpierw skompilowany.

0

Np? Przeciez apache (czy co tam sie ma) jest jedynym laczem miedzy plikiem a swiatem, a zeby ten zostal wyslany musi zostac najpierw skompilowany.

No właśnie Apache i tu jest kruczek. :d

Ale od kiedy PHP jest kompilowane?? :-8

A jeśli chodzi o sam trick to trzeba znaleźć serwer, który nie ma włączonego safe-mode, a zdarzają się i takie. Wtedy właśnie to piszemy taki mały skrypt, żeby odczytywał plik z katalogu innego uzytkownika np: fopen( "../../nazwa_usera/public_html/plik.php", "r" ) i voila. Plik aby mógł być uruchomiony musi mieć prawo do odczytu dla innych użytkowników, a takim innym użytkownikiem jest właśnie Apache. Ale oczywiście trick działa tylko jeżeli safe-mode nie jest włączone na serwerze.

0

Ale oczywiście trick działa tylko jeżeli safe-mode nie jest włączone na serwerze.

Oj to nieciekawie bo właśnie chciałem stronę zrobić na serwerze bez safe mode. Chodzi o to żeby kilka zaufanych osób mogło dodawać newsy itp w postaci plików tekstowych, a tego się przy safe mode nie da zrobić (przynajmniej ja nie wiem jak) :-8.

0

zwykle w safe-mode to jest tak, że nie możesz sięgać skryptem poza swój katalog ( do potomnych możesz ), nie ma listowania plików i paru tam badziewi. A jeśli chodzi o to dodawanie newsów etc to przecież wystarczy odpowiedni kod napisac :-8

0

wystarczy odpowiedni kod napisac :-8

<?
    header('Location: index.php');
    $tytul = $_POST['tytul'];
    $autor = $_POST['autor'];
    $news = $_POST['news'];
    if($tytul!='' & $autor!='' & $news!='')
    {
       #data i czas
        $czas = date("H:i");
        $data = date("m.d.y");
        $data = $data." ".$czas;
        #połączenie stringów
        $tytul = str_replace("#", "?", $tytul);
        $autor = str_replace("#", "?", $autor);
        $news = str_replace("#", "?", $news);
        $news = str_replace("\n", "[BR]", $news);
        $s = $tytul . '#' . $data . '#' . $autor . '#' . $news . "\n";
	    #zapis do pliku
        $plik = fopen("news.dat", "a");
            fputs($plik, $s);
        fclose($plik);
    }

?>
Na localhoście piknie chodzi a na free.of.pl (safe mode) ni ptoka - żadnych błędów nie wywala ale porostu nie zapisuje pliku :-/ Jeżeli to nie safe mode to nie wiem co :-(

0

katalog w którym chcesz ten plik utworzyć lub jeżeli plik jest utworzony to musisz ustawić prawa zapisu dla innych użytkowników i będzie git.

0
if(!chmod("/db/links.dat", 0777))
{
     echo("Nie masz uprawnień do modyfikowania tego pliku");  
}
else
{
    $plik = fopen("links.dat", "a");
        fputs($plik, $s);
    fclose($plik);
}

Zgadnijcie.... nie działa (zwraca false), chciałem uniknąć forum (podobno 80% problemów ludzie rozwiązywali by sami gdyby nie mieli dostępu do Internetu :-) ) , ale robię wszystko według manuala php i nie chce działać.

0

moze

if (!is_writable($filename)) {
0

[glowa] ech, zacznijmy może od początku

funckja chmode zwraca true, jeżeli powiodło się jej wykonanie a nie jeżeli prawa są takie jak podane w funkcji. Sednem sprawy jest tutaj kto stworzył ten plik. Użytkownik czy apache. Jeżeli zrobiłeś to Ty, to Apache nie ma prawa zmienić owych ustawień. Najlepiej zaloguj się na ftp i wpisz literal 606 nazwa_pliku
nie potrzeba Ci żadnego tam 777 bo po pierwsze plik nie jest wykonywany bo to nie php etc, a po drugie po co ustawiać prawa grupie? To tylko może wpłynąć negatywnie na bezpieczeństwo Twojego serwisu.

0

Piknie chodzi, dzięki Cyber. Powiedz mi jeszcze jak zrobić, żeby nowy plik, tworzony przez php miał właśnie takie atrybuty?

0

jak to zrobić to nie wiem. W sumie nie wiem czy w ogóle jest jakaś osobna funkcja do tworzenia plików, ale kiedy próbujesz otworzyć jakiś plik z opcją "w" albo "a" etc to jeżeli owego nie ma to zostaje on stworzony właśnie przez apache. Wtedy jakby na to nie patrzeć Apache jest właścicielem pliku, więc możesz spokojnie użyć w php funkcji chmod, powinno zadziałać.

0

Bezpieczeństwo & PHP... mniam :d
Jako samozwańczy "ekspert" od spraw zebezpieczeń w PHP+MySQL dołożę cosik od siebie ;p
Tak jak ludzie prawili - użyj md5. Zgadzam się, że można dojść do hasła mając jego hash, ale... Z własnego doświadczenia wiem, że to TRWA. Kiedyś łamałem tak hasło (fakt zakres znaków był całkiem spory) i mi się znudziło przy 7 znaku. Na dojście do 8 znaku czekałem około 2 dni. Program działał na maszynie 2,4Ghz przy najwyższym priorytecie (nice -20 :-)) Czas na złamanie hasła o długości np 10 znaków będzie odpowiednio dłuższy (czas rośnie tutaj w postępie geometrycznym?). I teraz zadaj sobie pytanie ile osób będzie miało ochotę na dożynanie kompa? ;-)
Drugą sprawą jest serwer, na którym wisi skrypt. Nie zgadzam się, że prawa do skryptu muszą być ustawione tak, aby każdy mógł go sobie czytać :-) Tak NIE jest na przykład na moim serwerze ;p. Wieć nie gadajcie mi tu, że można sobie bezkarnie czyjeś hasła podgladać :-)

0

Tak NIE jest na przykład na moim serwerze . Wieć nie gadajcie mi tu, że można sobie bezkarnie czyjeś hasła podgladać

sam napisałeś, że na przykład na Twoim serwerze tak jest. Mi chodziło o to, że są takie serwerki gdzie takie coś będzie możliwe, ja dałem tylko przykład, który wcześniej wypróbowałem i działało.

0

Tak NIE jest na przykład na moim serwerze . Wieć nie gadajcie mi tu, że można sobie bezkarnie czyjeś hasła podgladać

sam napisałeś, że na przykład na Twoim serwerze tak jest. Mi chodziło o to, że są takie serwerki gdzie takie coś będzie możliwe, ja dałem tylko przykład, który wcześniej wypróbowałem i działało.

o co biega? [???]

0

no bo pisałeś, że nie można wydobyć hasła w sposób który ja podawałem

Tak NIE jest na przykład na moim serwerze . Wieć nie gadajcie mi tu, że można sobie bezkarnie czyjeś hasła podgladać

tak to przynajmniej zrozumialem :-8

0

Bezpieczeństwo & PHP... mniam :d
Jako samozwańczy "ekspert" od spraw zebezpieczeń w PHP+MySQL dołożę cosik od siebie ;p
Tak jak ludzie prawili - użyj md5. Zgadzam się, że można dojść do hasła mając jego hash, ale... Z własnego doświadczenia wiem, że to TRWA. Kiedyś łamałem tak hasło (fakt zakres znaków był całkiem spory) i mi się znudziło przy 7 znaku. Na dojście do 8 znaku czekałem około 2 dni. Program działał na maszynie 2,4Ghz przy najwyższym priorytecie (nice -20 :-)) Czas na złamanie hasła o długości np 10 znaków będzie odpowiednio dłuższy (czas rośnie tutaj w postępie geometrycznym?). I teraz zadaj sobie pytanie ile osób będzie miało ochotę na dożynanie kompa? ;-)
Drugą sprawą jest serwer, na którym wisi skrypt. Nie zgadzam się, że prawa do skryptu muszą być ustawione tak, aby każdy mógł go sobie czytać :-) Tak NIE jest na przykład na moim serwerze ;p. Wieć nie gadajcie mi tu, że można sobie bezkarnie czyjeś hasła podgladać :-)

Można również poza normalnym hashowaniem zrobić coś takiego jak:

  1. Hashujesz hasło. (md5)
  2. Przestawiasz np. ostatnie dwa znaki HASHa (np. jak masz "abcdefgh" to zmieniasz na "abcdefhg").
  3. Ponownie hashujesz.
    Wszystko oczywiście robi skrypt np.
<?
if(!isset($_POST["haselko"])) { // Sprawdzamy czy zmienna przechowująca hasło przesłane metodą POST do skryptu jest ustawiona - czy zostało przesłane to hasło.
?>
<form action="skrypt.php" method="POST"> // Zmienna nie ustawiona - formularz do podania hasła
<input type="password" name="haselko">
<input type="submit" name="przycisk" value="Wyślij">
<?
}
else {
$haslo=$_POST["haselko"];
$haslo=md5($haslo);
$temp=$haslo;
$haslo[count($haslo)]=$haslo[count($haslo)-1]; // Zamieniamy ostatni znak ze zmiennej $haslo na przedostatni znak tej zmiennej.
$haslo[count($haslo)-1]=$temp[count($temp)]; // Zamieniamy przedostatni znak ze zmiennej $haslo na ostatni znak ze zmiennej $temp - pierwotnej (przed "przestawieniem") partości zmiennej $haslo.
$haslo=md5($haslo); // Hashujemy "poprzestawiany" hash hasła.

// Hasło ze formularza zostało przetworzone, teraz należy tą samą metodą przetworzyć hasło z pliku (poprawne hasło).

$haslo2="tu ma byc poprawne hasło, możesz je pobrać z pliku lub samemu je podać";
$haslo2=md5($haslo);
$temp2=$haslo;
$haslo2[count($haslo2)]=$haslo2[count($haslo2)-1]; // Zamieniamy ostatni znak ze zmiennej $haslo2 na przedostatni znak tej zmiennej.
$haslo2[count($haslo2)-1]=$temp2[count($temp2)]; // Zamieniamy przedostatni znak ze zmiennej $haslo na ostatni znak ze zmiennej $temp2 - pierwotnej (przed "przestawieniem") partości zmiennej $haslo2.
$haslo2=md5($haslo2); // Hashujemy "poprzestawiany" hash hasła.

if($haslo===$haslo2) {
echo("Hasło poprawne!"); // Hasło poprawne.
}
else {
echo("Hasło niepoprawne!"); // Hasło niepoprawne.
exit;
}
}
?>

Oczywiście jeżeli poprawne hasło będzie stałe (cały czas będzie takie same) - nie będzie pobierane z pliku to można pominąć drugą część skryptu (przetwarzanie hasla ze zmiennej $haslo2) - wystarczy przypisać już przetworzony HASH hasła (zgodnie z algorytmem podanym w skrypcie) zmiennej $haslo2.

Pozdro Mac

0

To wyżej pisałem ja - Mac :)
Pozdro :)

0

to mozna jeszcze inaczej (zamiast uzywac podwójnie md5)... mozna np. najpierw haslo zhashowac md5 a potem ten hash podzielic na pol i zxorowac jedno przez drugie (a xor b) :D

w sumie to mozna kombinowac na rózne sposoby :D

0

No to jak piszesz, że wykonując na 2,4 GHz na 8 znak czekałeś 2 dni, a hashowanie było wykonywane na samym kompie, nie gdzieś na serwerze, to pomyśl ile zajęłoby Ci odhashowywanie mojego hasła (29 znaków, małe i duże litery + cyfry :) ), kiedy operacja musi być wykonywana na serwerze (no, chyba, że wcześniej dorwiesz się do mojej bazy danych :) ). Inną sprawą jest, że każde podwojenie operacji dwukrotnie zwiększa ten czas, a przy sprawdzaniu podanego prawidłowego jednego hasła jest niezauważalne. To tyle ode mnie. Ogólnie md5 jest naprawdę dobrym sposobem hashowania, tylko wymyśl hasło min. na 10 znaków i 3 lata nikomu nie wystarczą, żeby to hasło złamać...

0

Co do tych 2 dni rzekomego lamania hasla: wezme 40 kompow 2,4 GHz i zlamie w kilkadziesiat minut. Wbrew pozorom nie jest to takie trudne. Zgadzam sie natomiast z tym, ze malo komu bedzie sie chcialo, bo zeby takiego grida zestawic, trzeba umiec troszke programowac no i miec do dyspozycji ze 40 kompow, ale w sumie co za problem - malo to luserow na sieci, co to windy niepopatchowane maja?

Odnosnie atrybutow plikow php - Apache musi miec pozwolenie na odczyt, a wiec dziura w apache'u moze spowodowac uzyskanie dostepu zdalnego.

Mozna tez sie wlamac podkradajac sessionid (hehe - php zapisuje je jawnie w tempie - ci goscie, ktorzy pisza php nie maja zielonego pojecia o bezpiecznym programowaniu).

No i jest jeszcze tysiac innych sposobow (w ktoryms hackingu bylo, ale nie sprawdzalem). Jesli chodzi o bezpieczenstwo PHP jest najgorszym wyborem. Wiekszosc wlaman na rozne witryny WWW jest dokonywana wlasnie przez skrypty w PHP.

0

Mozna tez sie wlamac podkradajac sessionid (hehe - php zapisuje je jawnie w tempie - ci goscie, ktorzy pisza php nie maja zielonego pojecia o bezpiecznym programowaniu).

lol, super noi co z tego?

Po prostu trzeba sie pilnowac, np takie slynne niedopatrzenie przy korzystaniu z MySQL (z reszta w ogole SQL). Przykladowo ma ktos skrypt logowania, ktory wysyla zapytanie do bazy:

SELECT * FROM users WHERE login="wolverine" AND password="jakieshaslo"

i tera w niezabezpieczonym skrypcie w polu login wpisujemy:

";DELETE * FROM users

nie zalogujemy sie, ale skasujemy za to cala tabele z userami.

O wlamywaniu przez skrypty PHP mozemy mowic jedynie w przypadku, gdy mamy prawo wgrywac cos na ten sam serwer.

Co do lamania hasla, to rzeczywiscie kupa czasu (jezeli mowimy tu o bruteforce). Lecz i do tego mozna odpowiednie "zabezpieczenie" napisac, typu kilkanascie logowan na dane ip. Temat rzeka, przydal by sie jakis art o bezpieczenstwie w php.

Co do tych 2 dni rzekomego lamania hasla: wezme 40 kompow 2,4 GHz i zlamie w kilkadziesiat minut.

No nie wiem, taki bf, zgadujesz wszystkie mozliwosci po kolei, za kazdym razem postujesz haslo, a mozliwosci jest ilosc znakow^~32, wiec troche duzo

//Prawde mowiac, to gdzie to przeczytalem :-P

0

SELECT * FROM users WHERE login="wolverine" AND password="jakieshaslo"

i tera w niezabezpieczonym skrypcie w polu login wpisujemy:

";DELETE * FROM users

Wolverin, a próbowałeś kiedyś tak się włamać? Otóż składnia SQL nie pozwala na stosowanie wielu oddzielnych zapytań w jednym poleceniu. Powyżej opisanym sposobem nie zrobisz kompletnie nic. Natomiast podstawowymi metodami SQL Injection co najwyżej wyciągniesz z bazy danych część danych, do których nie powinieneś mieć dostępu, uzyskasz nie przysługujące Ci prawa lub zrobisz DoS serwerowi SQL. Ale nic nie usuniesz. Nie można kleić zapytań SELECT z DROP/DELETE/UPDATE.

1 użytkowników online, w tym zalogowanych: 0, gości: 1