Мне нужно очистить данные, поступающие с $_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);
Где я должен сделать эту санитарию, в моем сеттере или в конструкторе
Вы пишете универсальный класс для получения данных из HTTP-запроса.
Нет никакого здравого пути, чтобы продезинфицировать это.
Чтобы сделать данные безопасными, вам нужно учитывать две вещи (и вы не можете знать ни одну из них при написании универсального класса для извлечения данных из HTTP-запроса):
Должны ли данные быть чьей-то датой рождения? Затем вам нужно проверить, что это действительная дата.
Должны ли данные быть чьим-либо адресом? Затем вы нужно быть очень осторожным о том, что вы думаете, разрешено.
Должны ли данные быть необработанными HTML? Если вы планируете поместить его в HTML-документ, тогда у вас есть все виды рисков, и вам нужно подумать о том, насколько вы доверяете человеку, отправляющему данные и / или использующему что-то вроде HTML Purifier, для ограничения того, какие теги и атрибуты можно использовать.
Должны ли данные быть простым текстом? Ну, это может включать такие символы, как <
а также '
которые имеют особое значение в разных местах (например, HTML и SQL), и они могут использоваться совершенно законно в контексте того, о чем идет речь в тексте. Вы не можете отфильтровать их полностью, не нарушая того, что люди пытаются сказать.
Большую часть времени вы захотите либо:
Обычно вы делаете данные безопасными, избегая их. То, как вы избежите этого, зависит от того, куда вы его положили.
В SQL вы обычно используете подготовленный оператор с заполнителями. С XML вы обычно используете библиотеку DOM. С HTML вы обычно используете htmlspecialchars()
, И так далее.
Короче:
Других решений пока нет …