Zmienne globalne, register_globals

Gdy w pliku konfiguracyjnym PHP, dyrektywa register_globals jest ustawiona na wartość on, możemy do zmienny odwoływać się w wygodnym, krótkim stylu. Przykładowo jeśli w formularzu mamy pole o nazwie „zmienna” to w skrypcie PHP automatycznie zostaje zainicjowana zmienna o nazwie $zmienna, początkującym webmasterom taki sposób dostępu do zmiennych może wydawać się wygodny, jednak znacząco obniża on poziom bezpieczeństwa skryptu.

Najlepiej pokazać na to prostym przykładzie, mamy plik formularz.php w którym z listy wyboru wybieramy odpowiednie zapytanie bazy danych usuwające odpowiedni artykuł, wybrana opcja jest przesyłana do pliku zapytanie.php gdzie jest wykonywane odpowiednie zapytanie do bazy danych. Użytkownik miał do wyboru opcje:

DELETE FROM articles WHERE id=’XHTML’

lub

DELETE FROM srticles WHERE id=’CSS’

Co się stanie gdy w skrypcie zapytanie.php korzystamy z krótkiego stylu nazywania zmiennych, a użytkownik dopisze do adresu:

http://twojadomena.eu/zapytanie.php?zapytanie=DELETE FROM ARTICLES WHERE ID=’JS’

Skasowany zostanie artykuł o identyfikatorze JS. Jest to działanie do którego aktualnie zalogowany użytkownik nie miał odpowiednich uprawnień, a jednak przez błąd programisty mógł wykonać dowolne zapytanie do bazy danych.

Skoro wyjaśniliśmy już sobie że stosowanie krótkiego stylu nazywania zmiennych jest mało bezpieczne wyjaśnię co zrobić aby to bezpieczeństwo podnieść. Po pierwsze gdy mamy dostęp do plików konfiguracyjnych serwera należy ustawić wartość register_globals na off (takie jest ustawienie domyślne). Ponieważ jednak stosowanie długich nazw zmiennych jest mało wygodne, na początku każdego skryptu można zainicjować krótkie nazwy zmiennych, na przykład:

<?php
$zmienna = $_POST[‘zmienna’];
?>

Teraz gdy nawet zostanie metodą GET przesłana jakaś zmienna to i tak nie wpłynie to na jej wartość w skrypcie (ponieważ ma przypisaną wartość z metody POST).

470 total views, 1 views today

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code