Danych z GET powinniśmy unikać jak to tylko możliwe. I nie jest tak, że są one przekazywane tylko metodą http GET. POST, PUT, DELETE też mogą mieć pod $_GET dane pochodzące z query URLa.
Najczęściej z GET weźmiemy numer strony do paginacji:
$page = $_GET['p'] ?? 1;
$page = (int) $page;
Rzutujemy do typu int dla bezpieczeństwa. Choć to nadal nie jest idealne – jeżeli wartość p będzie jakimś tekstem, to page wyniesie 0!
Jest na to sposób:
$page = $_GET['p'] ?? 1;
$page = (int) $page ? (int) $page: 1;
Inny przykład to np. używanie searchTerma:
public function getUserTransactions(int $length, int $offset)
{
$searchTerm = addcslashes($_GET['s'] ?? '', '%_');
$params = [
'user_id' => $_SESSION['user'],
'description' => "%{$searchTerm}%"
];
//(...)
Tutaj musimy pamiętać, aby np. znak % w nazwie searchTerma nie pomieszał się SQLowi z operatorem %, którego też używamy.
Escapowanie dla bezpieczeństwa przed SQLInjection to już zadanie dla PDO i prepared statement, ale o tym pamiętać powinniśmy.