盲目信任
在我 11 岁左右的时候,有一次我坐在物理课上,手里拿着数量有限的量角器。小小年纪的我是个狡猾的短刀手,我决定不再等待,直接描摹别人画的图。这让我当时的物理老师大吃一惊,他停住脚步,大声喊道:"不!物理就是要精确!"
他说得有道理,这在编程领域也同样适用。
为了避免盲目相信,你应该注意以下错误:
-
未检查返回类型
-
未检查数据模型
-
假定数据库中的数据是正确的或符合您期望的格式
让我们更进一步,看看这段代码:
<?php
$isAdmin = false;
extract($_GET);
if ($isAdmin === true) {
echo "Hey ".$name."; here, have some secret information!";
}
在前面的代码中,有两个关键错误。第一个错误是我们直接提取 GET
变量;我们将远程定义的变量导入当前符号表,实际上允许任何人覆盖提取前定义的任何变量。
此外,我们在返回 GET
变量时没有对其进行消毒,这显然存在 XSS 漏洞。
因此,我们可以这样做:
<?php
$isAdmin = false;
if ($isAdmin === true) {
echo "Hey ".htmlspecialchars($_GET['name'])."; here, have some secret information!";
}