|
..:: Grafika w bezpiecznym miejscu (PHP) ::.. |
|
Data artykulu: 15-11-2009 13:52
(admin), modyfikowany:
13-06-2010 13:55 (admin)
|
Odwiedzin: 1285
|
|
| |
|
Tagi: php, programowanie,
|
| |
|
|
|
|
|
Dwa palce do góry i wal sie, Cartmanie bury! (Mateusz)
|
|
|
Czasami chciałbym opublikować sam dla siebie lub dla grona najbliższych znajomych post z grafiką. O ile treść postów trzymana jest w bazie danych i sterowanie dostępem do nich nie sprawia problemu, o tyle trzymanie obrazków w zasięgu apache'a jest problemem. Czemu? A bo ktoś niezalogowany może wpisać URL bezpośrednio do obrazka, np. http://www.rozenek.com/images/jakisobrazek.jpg
Jeśli katalog z obrazkami zostanie przesunięty poza dostęp apache'a (DocumentRoot serwera www), cały czas dostęp do plików będzie możliwy poprzez funkcję readfile, a zablokuje to dostęp do grafiki poprzez wpisywanie bezpośrednich URLi.
Uwaga! Skrypt tez nie sprawdza, czy plik np. jpg jest faktycznie plikiem jpg - jest to szczególnie ważne dla bezpieczeństwa serwera, w momencie, gdy różni użytkownicy mają możliwość uploadu obrazków.
Ponieważ tylko i wyłącznie ja jako admin strony mam dostęp do publikacji plików graficznych, zabezpieczenia tego nie wprowadzam.
Plik z grafiką wywołuję poprzez <img src="123,blabla.jpg">
Zawartość pliku show_image.php
<?
ob_start(); ### wyjasnienie na koncu
include("includes/header.php");
ob_end_clean(); ### wyjasnienie na koncu
### sprawdzamy rozszerzenie pliku ###
### explode wrzuca do tablicy $extensions 111.222.333.jpg wartosci 111 222 333 jpg
### end($extensions) wyswietla jej ostatni element, czyli jpg
$extensions = explode(".", $_REQUEST['img_name']);
### plik show_image NIE moze obslugiwac zmiennych typu REQUEST, GET czy POST, bo nie ma z nimi komunikacji
### jesli bedzie <img src="123"> - bedzie widzial zmienna o nazwie article_id
### ale nie zadziala juz wewnatrz pliku $_REQUEST[article_id] *bez* definicji tej zmiennej w linku SRC, pomimo
### ze ta zmienna caly czas istnieje na stronie!!!
### jesli ktos wpisze url http://www.rozenek.com/show_image.php?img_name=1.jpg&article_id=112 to nic nie zobaczy, bo nie zadziala zmienna
### (o ile nie mamy do niej dostepu) $get['id'] z pliku header.php - w pliku header.php nie dostaniemy nic, co prawda pustej zmiennej $get['id']
### nie ma w zastrzezonej tablicy $notforuser, ale jednoczesnie nie ma takiego katalogu :-) Tablica $notforuser przechowuje numery ID
### wszystkich zastrzezonych dla konkretnego lub niezalogowanego uzytkownika.
if(strpos($_REQUEST['img_name'], '/')===false && strpos($_REQUEST['article_id'], '/')===false)
{
if (!in_array($_REQUEST['article_id'], $notforuser))
{
header("Content-type: image/" . end($extensions));
readfile("/usr/home/sq8bgq/rozenek_img/" . $_REQUEST['article_id'] . "/" . $_REQUEST['img_name']);
}
else
{
echo "what are you doing here?";
}
}
else
{
echo "ty kradzieju";
}
### if(strpos($_REQUEST['img_name'], '/')===false && strpos($_REQUEST['article_id'], '/')===false)
### chroni przed atakiem typu: http://www.rozenek.com/,../../../../../../etc/passwd
### bez funkcji ob_start i pozostalych z nieznanych mi powodow wyswtelaja sie zamiast obrazka - krzaczki oraz
### Cannot modify header information - headers already sent by [...]
?>
| Podobalo Ci sie? Chcesz mi jakos podziekowac? Wcisnij "Lubie To":
|
|
|
|
|
|
| |
Session Fixation Kiedy podamy skryptowi PHP nieistniejący ID sesji, zostanie on utworzony. Jak hakerzy mogą to wykorzystać ? Najprościej poprzez dodanie do adresu:
http://www.mojadomena.pl/index.php?PHPSESSID=xxxxxxxxxxxxxxxx
Następnie ten adres przysyłamy do ofiary, kiedy ta się zaloguje, my po odświeżeniu strony mamy takie same [...]
|
Funkcja generująca losowy ciąg znaków Poniżej prezentuję prostą funkcję pozwalającą na generowanie losowych ciągów znaków dowolnej długości.
W przeciwieństwie do wbudowanej w PHP funkcji rand(), która potrafi generować jedynie pseudolosowe liczby z zakresu 0 do 32768, poniższa funkcja generuje dowolnej długości ciąg dowolnych znaków.
Oto ona:
func [...]
|
Cross-site request forgery (CSRF) Bardzo niebezpieczny typ ataku, polegający na wykorzystywaniu uprawnień osoby atakowanej. Polega on na przesłaniu osobie posiadającej uprawnienia do wykonania danej akcji (najczęściej administrator), linka który daną akcje wykonuję. Posłużmy się przykładem do opisania tego typu ataku: administrator do nadania przywilej [...]
|
| |
|
Tagi: php, programowanie,
|
| |
|
|
|
|
|
|
| |
| |