Какая функция FILTER_SANITIZE_ * для $ _GET

Мне нужно очистить данные, поступающие с $_GET переменная, но я не уверен, какой из списка использовать

  • FILTER_SANITIZE_ENCODED

  • FILTER_SANITIZE_STRING

  • FILTER_SANITIZE_URL

Это мой случай:

Я строю класс обработчика запросов, который должен возвращать переменные из $_GET а также $_POST, Эти значения будут использоваться в других классах

Вот что я уже сделал (Все еще черновик)

class RequestHandler
{
protected $getRequest;
protected $postRequest;
protected $cookieRequest;
protected $sessionRequest;

public function __construct($getRequest = null, $postRequest = null, $cookieRequest = null, $sessionRequest = null)
{
if ($getRequest)
$this->setGetRequest($getRequest);

if ($postRequest)
$this->setPostRequest($postRequest);

if ($cookieRequest)
$this->setCookieRequest($cookieRequest);

if ($sessionRequest)
$this->setSessionRequest($sessionRequest);
}

public function setGetRequest($getRequest)
{
$this->getRequest = $getRequest;
return $this;
}

public function setPostRequest($postRequest)
{
$this->postRequest = $postRequest;
return $this;
}

public function setCookieRequest($cookieRequest)
{
$this->cookieRequest = $cookieRequest;
return $this;
}

public function setSessionRequest($sessionRequest)
{
$this->sessionRequest = $sessionRequest;
return $this;
}

public function getGetRequest()
{
return $this->getRequest;
}

public function getPostRequest()
{
return $this->postRequest;
}

public function getCookieRequest()
{
return $this->cookieRequest;
}

public function getSessionRequest()
{
return $this->sessionRequest;
}

}

Затем я могу использовать класс как

$a = new RequestHandler($_GET, $_POST, $_COOKIE, $_SESSION);

Где я должен сделать эту санитарию, в моем сеттере или в конструкторе

1

Решение

Вы пишете универсальный класс для получения данных из HTTP-запроса.

Нет никакого здравого пути, чтобы продезинфицировать это.

Чтобы сделать данные безопасными, вам нужно учитывать две вещи (и вы не можете знать ни одну из них при написании универсального класса для извлечения данных из HTTP-запроса):

Должны ли данные быть чьей-то датой рождения? Затем вам нужно проверить, что это действительная дата.

Должны ли данные быть чьим-либо адресом? Затем вы нужно быть очень осторожным о том, что вы думаете, разрешено.

Должны ли данные быть необработанными HTML? Если вы планируете поместить его в HTML-документ, тогда у вас есть все виды рисков, и вам нужно подумать о том, насколько вы доверяете человеку, отправляющему данные и / или использующему что-то вроде HTML Purifier, для ограничения того, какие теги и атрибуты можно использовать.

Должны ли данные быть простым текстом? Ну, это может включать такие символы, как < а также ' которые имеют особое значение в разных местах (например, HTML и SQL), и они могут использоваться совершенно законно в контексте того, о чем идет речь в тексте. Вы не можете отфильтровать их полностью, не нарушая того, что люди пытаются сказать.

Большую часть времени вы захотите либо:

  • Разрешить очень узкий набор ввода или же
  • Не вводите никаких ограничений на ввод

Обычно вы делаете данные безопасными, избегая их. То, как вы избежите этого, зависит от того, куда вы его положили.

В SQL вы обычно используете подготовленный оператор с заполнителями. С XML вы обычно используете библиотеку DOM. С HTML вы обычно используете htmlspecialchars(), И так далее.


Короче:

  • Не зацикливайтесь на защите / фильтрации данных, которые входят в вашу программу.
  • Выполните фильтрацию в той точке вашей программы, где вы знаете, какими должны быть данные.
  • Решите проблемы безопасности непосредственно перед тем, как переместить данные из PHP на другой язык или в другой формат.
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]