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.