Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] $_REQUEST a bezpieczeństwo
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


W jednym z artykułów http://www.webinside.pl/php/artykuly/197 przeczytać można, że nie zaleca się stosowania tej tablicy. Co o tym myślicie?

Przecież zamiast
  1. <?php
  2. if ( !empty($_POST['dzien']) )  $dzien  = $_POST['dzien'];  else $dzien  = $_GET['dzien'];
  3. if ( !empty($_POST['miesiac']) ) $miesiac = $_POST['miesiac']; else $miesiac = $_GET['miesiac'];
  4. if ( !empty($_POST['rok']) )  $rok  = $_POST['rok'];  else $rok  = $_GET['rok'];
  5.  
  6. if ( !empty($dzien) )  $data['mday'] = intval($dzien);
  7. if ( !empty($miesiac) ) $data['mon'] = intval($miesiac);
  8. if ( !empty($rok) )  $data['year'] = intval($rok);
  9. ?>


można użyć:
  1. <?php
  2. if ( !empty($_REQUEST['dzien']) )  $dzien  = $_REQUEST['dzien'];
  3. if ( !empty($_REQUEST['miesiac']) ) $miesiac = $_REQUEST['miesiac'];
  4. if ( !empty($_REQUEST['rok']) )  $rok  = $_REQUEST['rok'];
  5.  
  6. if ( !empty($dzien) )  $data['mday'] = intval($dzien);
  7. if ( !empty($miesiac) ) $data['mon'] = intval($miesiac);
  8. if ( !empty($rok) )  $data['year'] = intval($rok);
  9. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Prawda jest taka ze sie nie zaleca jej używania i mają rację. Chyba ze programista robi to zupełnie świadomie i ma w tym swój cel (a zdarzają sie takie sytuacje).
Jednak gdy wiesz, ze pewne dane mają iść postem, to uzywasz $_POST. Gdy inne maja isc w url, to uzywasz $_GET.
Go to the top of the page
+Quote Post
cadavre
post
Post #3





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Nie winno stosować się REQUESTa gdyż ten przechwytuje wszystkie dane o określonej nazwie - tak więc gdy wysłane zostaną równocześnie np. $_FILES i $_POST o takich samych nazwach powstanie konflikt.
Go to the top of the page
+Quote Post
Jarod
post
Post #4





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Rozumiem, ale ja zmieniam nazwy zmiennych dla różnych skryptów, konflikt nie powstanie. A takie rozwi±zanie zaoszczędza czas i skraca kod, bo w skrypcie muszę sprawdzać czy dane zostały przesłane $_POST czy $_get. Zwi±zane jest to z tym, że z formularza (np. szukaj w bazie czegoś) dane przesyłane są POSTem ale użytkownik wracając z wyników przesyła GET. Czy oprócz konfliktu zmiennych są jakieś inne niebezpieczeństwa?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Gdzie widzisz problem? W tym, że masz ścisły podział na GET i POST? To jest złe? Niewygodne? Oj. Jest dokładnie odwrotnie. Jeśli używasz GET i POST, to zawsze wiesz, gdzie ewentualnie szukać problemów. REQUEST już tego nie gwarantuje. Uzywanie go raczej zaciemnia kod i kiedyś może sie nieprzyjemnie odbić.
REQUEST jest tak somo bezpieczne jak POST i GET.

Pozdrawiam.

Ten post edytował Cysiaczek 28.07.2006, 13:31:24
Go to the top of the page
+Quote Post
Jarod
post
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(Cysiaczek @ 28.07.2006, 12:30 ) *
Gdzie widzisz problem? W tym, że masz ścisły podział na GET i POST? To jest złe? Niewygodne?

Ja tego nie powiedziałem. Tylko w moim przypadku użycie REQUEST skraca kod i jednocześnie czas wykonywania. Tu ułamek, tak ułamek sekundy i się zbiera. Poprostu tak jak podałem w kodzie (dotychczasowy kod) muszę sprawdzać GET i POST a tak mam po kłpocie.

Cytat(Cysiaczek @ 28.07.2006, 12:30 ) *
REQUEST jest tak somo bezpieczne jak POST i GET.


dziękuje.

Pozdrawiam
Go to the top of the page
+Quote Post
Kicok
post
Post #7





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Jeśli ten rok, miesiąc i dzień przesyłasz do skryptu przez pasek adresu, to nie musisz sprawdzać $_POST.
Jeśli ten rok, miesiąc i dzień przesyłasz do skryptu za pomocą jakiegoś formularza, to nie musisz sprawdzać $_GET
Jeśli chcesz, żeby dało się ten rok, miesiąc i dzień wysłać zarówno przy pomocy formularza jak i przy pomocy paska adresu, to możesz używać $_REQUEST, albo zainteresować się takimi konstrukcjami:

  1. <?php
  2. $rok = (isset($_POST['rok']) ? $_POST['rok'] : $_GET['rok']);
  3. ?>

  1. <?php
  2. $rok = $_POST['rok'] or $rok = $_GET['rok'];
  3. ?>


Ten post edytował Kicok 28.07.2006, 16:04:36
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 22:40