Podręcznik użytkownika CodeIgniter wersja 2.2.1


Input Class

Klasa Input służy dwóm celom:

  1. Obróbce danych wejściowych dla celów bezpieczeństwa
  2. Dostarczeniu funcji pomocniczych do pobierania danych wejściowych i ich obróbki.

Uwaga: Ta klasa jest ładowana automatycznie przez system, dlatego nie musisz tego robić samodzielnie.

Bezpieczne filtrowanie

Funkcja bezpiecznego filtrowania jest wywoływana automatycznie kiedy uruchamiany jest kontroler. Wykonuje ona następujące czynności:

Filtrowanie XSS

Klasa Input ma możliwość automatycznego filtrowania, aby przeciwdziałać atakom cross-site scripting. Jeśli chcesz aby filtr był uruchamiany automatycznie za każdym razem gdy napotka na dane typu POST lub COOKIE, możesz go włączyć poprzez otwarcie pliku application/config/config.php i ustawienie następującej zmiennej konfiguracyjnej:

$config['global_xss_filtering'] = TRUE;

Po więcej informacji na temat tego w jaki sposób używać filtrowania XSS w swojej aplikacji, proszę zajrzeć do dokumentacji klasy Security.

Używanie danych typu POST, COOKIE i SERVER

CodeIgniter dostarcza trzy funkcje pomocnicze, które pozwalają pobierać dane POST, COOKIE i SERVER. Główną zaletą używania tych funkcji, zamiast korzystania bezpośrednio z samych zmiennych ($_POST['something']), jest to, że funkcje sprawdzają, czy dana zmienna istnieje i jeśli nie zwracają wartość false (boolean). W ten sposób możesz wygodnie używać zmiennych bez konieczności wcześniejszego sprawdzania czy istnieją. Innymi słowy, normalnie mógłbyś robić coś w tym rodzaju:

if ( ! isset($_POST['something']))
{
    $something = FALSE;
}
else
{
    $something = $_POST['something'];
}

Dzięki wbudowanym funkcjom CodeIgnitera, możesz po prostu zrobić tak:

$something = $this->input->post('something');

Te trzy funkcje to:

$this->input->post()

Pierwszy parametr będzie zawierał nazwę talicy POST, której szukasz:

$this->input->post('some_data');

Funkcja zwraca FALSE (boolean), jeśli dane które chcesz zwrócić nie istnieją.

Drugi, opcjonalny parametr, pozwala na przefiltrowanie danych pod kontem XSS. Filtr jest uruchamiany poprzez przypisanie do drugiego parametru wartości TRUE (boolean).

$this->input->post('some_data', TRUE);

Aby zwrócić tablicę wszystkich zmiennych POST, wywołaj funkcję bez żadnych parametrów.

Aby zwrócić tablicę wszystkich zmiennych POST, ale przefiltrowaną pod kontem XSS, pierwszy parametr należy ustawić na wartość NULL, a drugi na wartość TRUE.

Funkcja zwróci wartość FALSE (boolean), jeśli nie ma żadnych zmiennych w tablicy POST.

$this->input->post(NULL, TRUE); // zwraca wszystkie zmienne POST przefiltrowane pod kontem XSS
$this->input->post(); // zwraca wszystkie zmienne POST bez filtrowania

$this->input->get()

Ta funkcja jest taka sama jak funkcja post, z tym że odnosi się do danych typu get:

$this->input->get('some_data', TRUE);

Aby zwrócić tablicę wszystkich zmiennych GET, wywołaj funkcję bez żadnych parametrów.

Aby zwrócić tablicę wszystkich zmiennych GET, ale przefiltrowaną pod kontem XSS, pierwszy parametr należy ustawić na wartość NULL, a drugi na wartość TRUE.

Funkcja zwróci wartość FALSE (boolean), jeśli nie ma żadnych zmiennych w tablicy GET.

$this->input->get(NULL, TRUE); // zwraca wszystkie zmienne GET przefiltrowane pod kontem XSS
$this->input->get(); // zwraca wszystkie zmienne GET bez filtrowania

$this->input->get_post()

Ta funkcja będzie szukać w poszukiwaniu zmiennych po obu tablicach post i get. Najpierw sprawdzana jest tablica post, później get:

$this->input->get_post('some_data', TRUE);

$this->input->cookie()

Ta funkcja jest taka sama jak funkcja post, z tym że odnosi się do danych typu cookie:

$this->input->cookie('some_data', TRUE);

$this->input->server()

Ta funkcja jest taka sama jak powyższa, z tym że odnosi się do danych typu server:

$this->input->server('some_data');

$this->input->set_cookie()

Ustawia ciasteczko z wartością jaką określiłeś. Są dwa sposoby na przypisanie informacji do tej funkcji: poprzez tablicę i dyskretne parametry:

Tablica

W tej metodzie, tablica asocjacyjna jest przypisywana do pierwszego parametru:

$cookie = array(
    'name'   => 'Nazwa ciasteczka',
    'value'  => 'Wartość',
    'expire' => '86500',
    'domain' => '.some-domain.com',
    'path'   => '/',
    'prefix' => 'myprefix_',
    'secure' => TRUE
);

$this->input->set_cookie($cookie);

Uwagi:

Jedynie nazwa i wartość są wymagane. Aby usunąć ciasteczko, ustaw je z pustą ważnością.

Ważność jest ustawiana w sekundach, które zostaną dodane do obecnego czasu. Nie dołączaj samego czasu, ale zamiast tego liczbę sekund od teraz do czasu, w którym ciasteczko ma być ważne. Jeśli ważność zostanie ustawiona na zero, to ciasteczko będzie ważne tylko do momentu zamknięcia przeglądarki.

Aby ustawić ciasteczko na całą witryną, niezależnie od tego w jaki sposób na nią wchodzimy, dodaj adres swojej domeny poprzedzając ją kropką, w ten sposób: .twoja-domena.pl

Ścieżka zazwyczaj nie jest potrzebna, ponieważ funkcja ustawia główną ścieżkę.

Wartość prefix jest potrzebna tylko wtedy, gdy musisz unikać kolizji z innymi, identycznie nazwanymi ciasteczkami dla Twojego serwera.

Wartość secure jest potrzebna tylko wtedy, gdy chcesz utworzyć chronione ciasteczko poprzez ustawienie wartości TRUE.

Dyskretne parametry

Jeśli chcesz, możesz ustawić dane ciastecza poprzez przypisanie indywidualnych parametrów:

$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);

$this->input->cookie()

Pozwala na pobranie ciasteczka. Pierwszy parametr musi zawierać nazwę ciasteczka, którego szukach (włączając w to prefix):

cookie('some_cookie');

Ta funkcja zwraca wartość FALSE (boolean) jeśli wartość, którą chcesz zwrócić nie istnieje.

Drugi, opcjonalny parametr pozwala na uruchomienie filtrowania XSS dla wskazanej wartości. Tą opcję włącza się poprzez ustawienie wartości TRUE w drugim parametrze.

cookie('some_cookie', TRUE);

$this->input->ip_address()

Zwraca adres IP dla obecnego użytkownika. Jeśli adres IP nie jest poprawny, funkcja zwróci adres IP o wartości: 0.0.0.0

echo $this->input->ip_address();

$this->input->valid_ip($ip)

Jako parametr funkcja przyjmuje adres IP i zwraca wartość TRUE lub FALSE (boolean) w zależności od poprawności adresu. Uwaga: Powyższa funkcja $this->input->ip_address() sprawdza poprawność adresu IP automatycznie.

if ( ! $this->input->valid_ip($ip))
{
     echo 'Not Valid';
}
else
{
     echo 'Valid';
}

Akceptuje opcjonalny, drugi parametr "IPv4" lub "IPv6", aby określić format adresu IP. Domyślnie sprawdzane są oba formaty.

$this->input->user_agent()

Zwraca wartość user agent (danych przeglądarki), której korzysta obecny użytkownik. Zwraca FALSE jeśli wartość nie jest dostępna.

echo $this->input->user_agent();

Sprawdź klasę User Agent aby poznać metody, które pozwalają na dostęp do informacji z danej user agent.

$this->input->request_headers()

Przydatne podczas pracy w środowisku bez serwera Apache, gdzie apache_request_headers() nie są wspierane. Zwraca tablicę nagłówków.

$headers = $this->input->request_headers();

$this->input->get_request_header();

Zwraca pojedynczą wartość dla tablicy request headers.

$this->input->get_request_header('some-header', TRUE);

$this->input->is_ajax_request()

Sprawdza, czy został ustawiony nagłówek HTTP_X_REQUESTED_WITH i zwraca wartość TRUE lub FALSE.

$this->input->is_cli_request()

Sprawdza, czy ustawiona jest stała STDIN, co jest bezpiecznym sposobem na sprawdzenie, czy żądanie PHP zostało uruchomione z poziomu linii komend.

$this->input->is_cli_request()