如何防止用户生成的故障?

时间:2011-10-05 22:49:06

标签: php code-injection

我是PHP的新手,所以不知道这会是怎样的。假设我有一个添加好友页面。在数据库中假设我有一个名为“friends”的表和以下行:my_id和friend_id以及id_request。

现在我的php页面看起来像:addfriend.php?id = friendid

然后我使用该链接中的id将数据库中的id和该friendid插入到数据库中。

问题是如果有人在地址栏的链接中输入“kdjfkldjlfk”会发生什么?

4 个答案:

答案 0 :(得分:1)

你需要防止这些情况并验证

前:

测试$ _GET ['id'] isset并且friendid是真的,你可以查询数据库以查看id是否存在...

答案 1 :(得分:1)

如果您的意思是“如果某人访问URI的ID不存在会发生什么?”,那么这取决于您的PHP应该发生什么。

如果您的PHP没有检查它从SQL查询中获得了多少结果,那么该页面很可能会吐出 500内部服务器错误

如果您已正确设计,那么它会返回一个文档,说明您无法添加不存在为朋友的用户。

实际上,如果你已经正确设计了数据,那么数据应该通过POST而不是GET发送,因为添加朋友不是幂等事件。 (参见HTTP specification - GET应该没有副作用)

答案 2 :(得分:1)

您需要验证您的用户输入。首先,将$_GET值转换为int类型,如果它等于0,告诉他们他们错误输入了它。

$var = (int)$_GET['id'];

if($var == 0)
{
    // Error
}
else
{
    // The rest of your code
}

答案 3 :(得分:1)

事实证明,PHP内置了一些非常酷的过滤功能。你应该学习它们并使用它们:

if (filter_var($_GET['id'], FILTER_VALIDATE_INT) === false) {
    // error
}

if (filter_var($_GET['email'], FILTER_VALIDATE_EMAIL) === false) {
    // error
}

if (filter_var($_GET['ip_address'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {
    // error
}

http://us.php.net/manual/en/function.filter-var.php