我设置了一个php cookie
setcookie('pr','gulfstream',time()...etc...)
我的验证页面包含如下数组和语句。
$planes = array('gulfstream','Piper','Citation');
$abc = isset($_COOKIE['pr']) && in_array($_COOKIE['pr'],$planes) ? $_COOKIE['pr']:0;
我的访问者页面使用:
echo $abc;
问题:输出到页面是否安全,或者我应该进一步验证语句:
$abc = isset($_COOKIE['pr']) && in_array($_COOKIE['pr'],$planes) ? htmlspecialchars($_COOKIE['pr']):0;
答案 0 :(得分:1)
我认为没有办法在此示例中使用此代码。
无论如何,我认为你必须意识到它是通过类型杂耍(通常转换为整数0
)的可能性使其可利用。
这就是为什么我建议您使用in_array
的严格模式
in_array($_COOKIE['pr'],$planes, true); //third parameter enforces type checking
答案 1 :(得分:1)
即使你已经验证了cookie,它仍然意味着包含文本,而不是HTML代码。在输出HTML文档中的文本之前,应始终使用htmlspecialchars。