[PHP] Kilka pytań o bezpieczeństwo skryptów

Hej!

Mam kilka pytań dotyczących bezpieczeństwa skryptów php i zagadnień z tym związanym.

  1. Czy ta funkcja wystarczy do filtrowania wszystkich danych pochodzących z tablic $_GET, $_POST i z formularzy?

    function prepareString($text) {

     $text = addslashes($text);
    
     $text = htmlspecialchars($text);
    
     return $text;
    

    }

Z tego co się orientuje jeszcze powinienem dopisać sprawdzanie czy magic_quotes jest włączone bo inaczej po " powstaną ukośniki…

  1. O co chodzi z identyfikatorami sesji np. podczas wysyłania postu? Jest identyfikator bodajże sid który jest przesyłany metodą $_GET po co to?

Proszę o odpowiedź i pozdrawiam

  1. Trochę bym to uzupełnił. Dla przykładu, jeżeli oczekujesz na zmienna _POST typu całkowitego, to sprawdzałbym, czy dane przychodzące to rzeczywiście liczba itd.

Tak jak kolega flaszer napisał, rzutuj dane na typ numeryczny jeśli spodziewasz się liczby (np. dodaj dodatkowy parametr do funkcji, że jesli = True to rzutujesz)

Zmień również funkcje addslashes() na mysql_real_escape_string()

Magic quotes zawsze powinno być na Off a dane powinny być odpowiednio filtrowane przez programistę. Nie sprawdzaj czy jest włączone tylko jeśli masz możliwość to wyłącz.

SID w adresie oznacza to ze SID jest w adresie zamiast w cookie (zależy od danej konfiguracji sesji). Plus tego jest taki że nie jesteś zależny od cookie (bo niby użytkownik może mieć wyłączone cookie chociaż ja się jeszcze z taką osobą nie spotkałem) minus tego jest taki że - osoba X może za plecami osoby Y która jest np. zalogowana na forum przepisać SID danej sesji i przejąć konto. Osobiście = tylko cookie

wychodzisz z błędnego założenia, że funkcja nazywająca się prepareString może zajmować się czymś co w domyśle ma być liczbą, a zasadniczo tak nazwana funkcja powinna była zajmować się tylko tekstem

tutaj kolejne CHYBA błędne założenie, że użytkownik zamierza wykorzystywać mysql, w zasadzie wszystko zależy od tego na ile podobnie działają funkcje takie jak mysql_real_escape_string(), mysqli_real_escape_string(), pg_escape() i co tam jest jeszcze…

Ok dzięki za info.

Podsumowując, jeżeli dane idą do bazy danych to lepiej stosować mysql_real_escape_string(), tak?

lepiej korzystać z metod natywnych dla danego systemu zarządzania bazą, lepiej w ogóle nie korzystać z funkcji zaczynających się od mysql_

Dzięki za odpowiedzi. Czyli lepiej korzystać z addslashes(). A możesz mi wytłumaczyć (wiem że zapewne głupie pytanie) co to są metody natywne? :slight_smile: W googlach pisze tylko coś o javie…

nie, lepiej nie korzystać z addslashes, lepiej korzystać z funkcji przygotowanej dla systemu bazodanowego którego używasz, jednak korzystanie z mysql poprzez funkcje przygotowane specjalnie pod ten system (mysql_real_escape_string(), mysqli_real_escape_string(), pg_escape() itd.). jednak obsługa mysql w php poprzez funkcje mysql_ jest mało wydajna dlatego lepszym rozwiązaniem, jeżeli korzystasz z mysql będzie zainteresowanie się mysqli albo PDO

Zgadzam się z tym. Polecam http://www.phpro.org/tutorials/Introduction-to-PHP-and-MySQL.html, gdzie w przykładach zaprezentowane są te 3 sposoby (mysql, mysqli, pdo) operowania na bazie danych.