我需要清理来自$_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);
在我的二传手或我的构造函数中,我应该在哪里进行这种卫生
答案 0 :(得分:3)
您正在编写通用类以从HTTP请求中获取数据。
没有理智的方法来消毒它。
为了确保数据安全,您需要考虑两件事(在编写用于从HTTP请求中提取数据的通用类时,您无法了解其中任何一个):
数据应该是某人的出生日期吗?然后你需要检查它是否是一个有效的日期。
数据应该是某人的地址吗?然后你need to be very careful about what you think is allowed。
数据应该是原始HTML吗?如果您计划将其放入HTML文档中,那么您将面临各种风险,您需要考虑您对发送数据的人的信任程度和/或使用HTML Purifier等内容来限制可以使用哪些标记和属性。
数据应该是纯文本吗?好吧,它可能包含<
和'
等字符,这些字符在各个地方都有特殊含义(例如HTML和SQL),它们可能完全合法地用于文本所讨论的任何内容。你无法完全过滤掉它们而不会破坏人们想说的话。
大多数情况下,你会想要:
通常,您可以通过转义来保护数据安全。你如何逃避它取决于你把它放在哪里。
使用SQL,您通常会使用带有占位符的预准备语句。使用XML,您通常会使用DOM库。使用HTML,您通常会使用htmlspecialchars()
。等等。
简而言之: