Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie o sens tego zabezpieczenia
Forum PHP.pl > Forum > PHP
xeo-programer
Witam.
Przejechałem wszystkie tematy na forum o bezpieczeństwie, zajęło mi to kilkadziesiąt dluższych chwil ale nie znalazłem odpowiedzi na nurtujące mnie pytanie. Do rzeczy:
znalazłem tego typu zabezpieczenie chyba przed dołączaniem niechcianych plików do skryptu:

Kod
$o = $_GET['o'] = $_POST['o'] = $_REQUEST['o'] = $_SESSION['o'] = $_COOKIE['o'] = $_SERVER['o'] = '';

if( $_GET['o']==$o AND $o<>'' )
displayError( 'błąd w zmiennych systemowych', 1, 'System wykrył obecność nieprawidłowej zmiennej w adresie URL.
Prawdopodobnie próba włamania się do systemu...' );

if( !@file_exists($o.'logs/config.log') )
displayError( 'brak pliku', 1, 'System nie może odnaleźć pliku - logs/config.log.' );


No i tu moje pytanie: czy ten kod zabezpiecza skrypty przed przekazywaniem w url zmiennych przy włączonej opcji register_globals i czy jest to skuteczna metoda ochrony. (widze że są zmienne globalne ale nie wiem czy to jest zabezpieczenie do tych zmienych)

this.pozdrawiam&help->pls
1010
Cytat
ten kod zabezpiecza skrypty przed przekazywaniem w url zmiennych przy włączonej opcji register_globals
dr_bonzo
To jest bez sensu:

to samo mozna zapisac tak:
  1. <?php
  2. $_GET['o'] = '';
  3. $o = '';
  4.  
  5. // wiec ponizszy warunek NIGDY nie bedzie spelniony
  6.  
  7. if( $_GET['o']==$o AND $o<>'' )
  8. ?>


A tego to nie rozumiem:
  1. <?php
  2. if( !@file_exists($o.'logs/config.log') )
  3. displayError( 'brak pliku', 1, 'System nie może odnaleźć pliku - logs/config.log.' );
  4. ?>

Stwierdzanie ze $o != '' na podstawie tego ze zostanie utworzona sciezka do nieistniejacego pliku? Idiotyzm.


Zeby zabezpieczyc sie przed register_globals wystarczy INICJOWAC kazda zmienna uzywana, np


ZLE:
URL = ...?zalogowany=1&haslo=abc
  1. <?php
  2. if ( $haslo = 'abc' ) 
  3. {
  4. $zalogowany = 1;
  5. }
  6.  
  7. if ( $zalogowany )
  8. {
  9. echo "tajne dane";
  10. }
  11. ?>

przyklad klasyczny, gdy w URLu ustawisz zmienna $zalogowany to przy sprawdzaniu
if ( $zalogowany )
$zalogowany i tak bedzie rowne 1 nie wazne jaka wartosc mialo $haslo

na poczatku skryptu nalezy wyzerowac $zalogowany (np $zalogowany = 0 ) lub np: tak

  1. <?php
  2. if ( $haslo = 'abc' ) 
  3. {
  4. $zalogowany = 1;
  5. }
  6. else
  7. {
  8. $zalogowany = 0;
  9. }
  10.  
  11. // tutaj masz calkowita kontrole nad zmienna $zalogowany, i nie jest wazne co zost
    alo w niej umieszczone za pomoca register_globals
  12.  
  13. if ( $zalogowany )
  14. {
  15. echo "tajne dane";
  16. }
  17. ?>
xeo-programer
dziękoofa wielka biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.