我应该使用什么类型的输入htmlspecialchars?或者我应该总是使用它来清理输入数据?还是有更好的'数据消毒'功能?这是假设这些值将存储在数据库中
示例:
$userdata = array(
'username' => $_POST['username'],
'email' => $_POST['email'],
'password' => $_POST['password']
);
// register function defined in a class user accepts array as parameter
// register function hashes password before storage
$this->user->register($userdata);
我应该将htmlspecialchars应用于这些数据吗?
答案 0 :(得分:1)
顾名思义,当您在HTML输出中输出字符串时,将调用htmlspecialchars
。例如:
<input type="text" name="username" value="<?= htmlspecialchars($user->name) ?>" />
在那里调用它可以确保引号,尖括号等使用相应的实体"
,<
,&
等进行正确编码。
您不应该在数据库数据上使用htmlspecialchars
。输出文本时转义文本,而不是存储时。
答案 1 :(得分:1)
我大部分时间都会使用htmlentities()
。
您通常在显示数据时将它们应用于数据。
E.g。
你有$str = '<iframe src="http://someurl..." />';
如果在输出时使用htmlentities,则&lt;和&gt;转换为html实体 - &amp; lt;和&amp; gt;
答案 2 :(得分:1)
htmlspecialchars应该用于用户输入的任何数据,这些数据会显示回任何用户。如果您不使用它来获取1条信息,那么您已经开启了Cross Site Scripting攻击。
在向数据库添加信息或将其保存到某个地方时,您不会使用它,那么您需要为数据库正确地转义它。这样可以避免SQL injection漏洞。