Widziałem ludzi (którzy zazwyczaj piszą dobry kod) bezpośrednio zmieniających $_POST
tablicę za pomocą takiego kodu:
// Add some value that wasn't actually posted
$_POST['last_activity'] = time();
// Alter an existing post value
$_POST['name'] = trim($_POST['name']);
// Our pretend function
// Pass the entire $_POST array as data to work with in the function
// The function update_record() will read only the values we actually need
update_record($_POST);
// ...That sure was easier than creating a new array
// with only the $_POST values we actually need.
Ma to sens, że update_record()
nie należy bezpośrednio uzyskiwać dostępu do $ _POST, więc możemy na przykład przekazać do niego inne tablice danych, ale z pewnością jest to leniwy, zły projekt, a może po prostu zły? Nadal jednak podajemy prawidłową tablicę update_record()
, więc po co tworzyć nową?
To nie jest sedno pytania, tylko przykład użycia. Słyszałem jednak, że wiele osób mówi, że nie należy tego robić z $_REQUEST
danymi, a to zła praktyka. Ale dlaczego? Wygląda wystarczająco nieszkodliwie.
Przykłady:
Ustawienie domyślnej
$_GET
(lub opublikowanej) wartości, która tak naprawdę nie istniejeDodawanie
$_POST
wartości, które nie zostały faktycznie opublikowane po przesłaniu formularzaBezpośrednie odkażanie lub filtrowanie
$_GET
wartości tablic lub kluczy na bardzo wczesnym etapie skryptu (awaryjne zabezpieczenia ... dlaczego nie?)$_POST
Ręczne ustawianie wartości przed przesłaniem formularza w celu wypełnienia danych wejściowych wartością domyślną (gdy dane wejściowe odczytują$_POST
wartość domyślną; zrobiłem to)Tworzysz własne
$_SERVER
wartości? Jasne, hej czemu nie?A co z innymi, jak
$_COOKIE
i$_SESSION
? Oczywiście musimy modyfikować te bezpośrednio, prawda? Więc dlaczego nie inni?
Czy bezpośrednia modyfikacja superglobali nigdy nie powinna być wykonywana, czy też jest w niektórych przypadkach w porządku ?