widoczne has

Wszystko Off Topic
ponton
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

widoczne hasło w pliku php

Post autor: ponton »

Witam.

Wiele aplikacji PHP wykorzystuje dostęp do bazy danych. Przy instalacji trzeba to hasło podać. Następnie hasło jest trzymane w pliku (np. config.php), do którego każdy ma dostęp (np. z shella). Czy jest jakiś sposób, żeby zabezpieczyć to hasło? ¯eby skrypt mógł czytać ten plik z hasłem, ale żeby on nie miał +r?

Pozdrawiam.
Awatar użytkownika
ruun
Member
Posty: 1366
Rejestracja: 29 marca 2007, 21:07
Lokalizacja: Kruszwica

Post autor: ruun »

ponton pisze:¯eby skrypt mógł czytać ten plik z hasłem, ale żeby on nie miał +r?
hehe, to chyba nie jest możliwe, może spróbuj zakodować hasło (md5).
miszmaniac
Posty: 79
Rejestracja: 09 maja 2007, 00:11
Lokalizacja: Gdynia

Post autor: miszmaniac »

Najlepiej zrób sobie plik w /etc/... np w /etc/php_includes/baza.php
o treści
<?php
$uztykownik_bazy=login
$haslo=...

?>
Zmień

Kod: Zaznacz cały

chown www-data:www-data nazwa_katalogu
(jeśli nie zadziała tak to root:root)
A potem

Kod: Zaznacz cały

chmod 700 nazwa_katalogu
Oczywiście, nie na całe etc tylko na ten katalog który utworzyłeś w środku.

Potem w skryptach php zamiast tych linijek dopisuj

Kod: Zaznacz cały

include("/etc/php/hasla.php");
Powinno zadziałać. Ja w taki sposób zawsze piszę.

PS. Hasła pozostają niezakodowane, ale nie są widzialne dla użytkowników.
Co do md5, to chyba nie jest dobre rozwiązanie, bo nawet jeśli hasło jest zakodowane, to w 30sekund można je rozkodować, więc ta metoda 'szyfrowania' na niewiele się nada :)
jaSS
Beginner
Posty: 388
Rejestracja: 02 czerwca 2006, 08:57

Post autor: jaSS »

Można zaszyfrować, istnieje wiele rozwiązań. Jedne tańsze drugie droższe, jedne leprze drugie gorsze ;)

Np podstawowy: Zend Encoder który działa na większości platform bez doinstalowywania czegokolwiek.

Wpisz w google i napewno znajdziesz mase rozwiązań, kiedyś miałem jakiś darmowy (wymagal tylko dokompilowania do php) jak sobie przypomne link to wkleje.
jang
Beginner
Posty: 208
Rejestracja: 26 stycznia 2007, 14:38

Post autor: jang »

ponton pisze:hasło jest trzymane w pliku (np. config.php), do którego każdy ma dostęp (np. z shella).
Ja tak z czystej ciekawości :
mam konto na jakimś serwerze i plik config.php

Kod: Zaznacz cały

<?php  if ( ! defined( 'DIR_LIB' ) ) exit( 'No direct script access allowed' )] = true;
...
?>
i jak z shella chcesz się do niego dobrać ? (zakładam że nie jesteś adminem)
miszmaniac pisze:Najlepiej zrób sobie plik w /etc/... np w /etc/php_includes/baza.php
Na serwerze masz dostęp do katalogu /etc ?

ponton
W katalogu ~/public_html utwórz sobie katalog np. /Config i chmod 700 a w nim trzymaj wszystkie pliki do których ma mieć dostęp tylko skrypt, a jeszcze lepiej utworzyć taki katalog powyżej public_html

Do kodowania możesz użyć np. SHA1

Pozdrawiam
miszmaniac
Posty: 79
Rejestracja: 09 maja 2007, 00:11
Lokalizacja: Gdynia

Post autor: miszmaniac »

jang pisze:Na serwerze masz dostęp do katalogu /etc ?
Jasne, przynajmniej dla roota, a niby jak apache odczytałby konfigurację?
W /etc/ tylko niektóre pliki nie mają praw do odczytu dla ogółu, np. shadow
jaSS
Beginner
Posty: 388
Rejestracja: 02 czerwca 2006, 08:57

Post autor: jaSS »

jang pisze:Ja tak z czystej ciekawości :
mam konto na jakimś serwerze i plik config.php
Kod:
<?php if ( ! defined( 'DIR_LIB' ) ) exit( 'No direct script access allowed' )] = true;
...
?>
i jak z shella chcesz się do niego dobrać ? (zakładam że nie jesteś adminem)
Najprostszym sposobem:

Kod: Zaznacz cały

echo file_get_contents('/sciezka/do/twojego/pliku/config.php');
A w necie jest mase skryptów do przegladania dysku poprzes php ;)
jang
Beginner
Posty: 208
Rejestracja: 26 stycznia 2007, 14:38

Post autor: jang »

miszmaniac pisze:
jang pisze:Na serwerze masz dostęp do katalogu /etc ?
Jasne, przynajmniej dla roota, a niby jak apache odczytałby konfigurację?
W /etc/ tylko niektóre pliki nie mają praw do odczytu dla ogółu, np. shadow
Jednym słowem bogaty jesteś skoro jesteś właścicielem wszystkich serwerów w sieci że wszędzie jesteś root'em, no chyba że masz tak dobre znajomości że wszędzie nadają Ci prawa root'a.
Może i mnie załatwisz takie konto.
jaSS pisze: Najprostszym sposobem:

Kod: Zaznacz cały

echo file_get_contents('/sciezka/do/twojego/pliku/config.php')]
[/quote]
Chyba się nie zrozumieliśmy. w ten sposób [b]echo file_get_contents('http://www.domena.com/config.php');[/b] chcesz odczytać mój plik ?
miszmaniac
Posty: 79
Rejestracja: 09 maja 2007, 00:11
Lokalizacja: Gdynia

Post autor: miszmaniac »

Jestem właścicielem swojego serwera + kilku w pracy, więc nie pomyślałem o tym, że ktoś może nie mieć roota :P
Po za tym, na jedno wychodzi. Chodziło o ideę umieszczenia pliku poza documentroot.
jaSS
Beginner
Posty: 388
Rejestracja: 02 czerwca 2006, 08:57

Post autor: jaSS »

[quote="jang"]Chyba się nie zrozumieliśmy. w ten sposób echo file_get_contents('http://www.domena.com/config.php')]

Ewidentnie sie nie zrozumieliśmy, ja mówiłem o przypadku kiedy "strona" znajduje sie na współdzielonym serwerze bez chroot/jail/vserver dla każdej domeny.

ponton mówil o dostępie przez shell, nawet jeżeli zablokuje taki dostęp żeby inni userzy na serwerze nie mogli wyświetlić tego pliku to user www-data musi mieć do niego dostęp a każdy inny user może odpalić skrypt php który tam sięgnie.

Kiedyś (dawno temu zanim zacząłem robić po prostu vservery) bawiłem sie z opcjami 'open basedir'/'safe_mode' + ograniczenie dostępu tylko dla użytkownika www-data do katalogów.
ODPOWIEDZ