Php 如何防止用户产生的故障?

Php 如何防止用户产生的故障?,php,code-injection,Php,Code Injection,我是PHP新手,所以不知道结果会怎样。假设我有一个添加好友页面。在数据库中,假设我有一个名为“friends”的表和以下行:my_id和friend_id以及id_request 现在我有一个php页面,看起来像:addfriend.php?id=friendid 然后我使用该链接中的id将我的id和那个friendid插入数据库 问题是,如果有人在地址栏的链接中输入“kdjfkldjlfk”,会发生什么情况?您需要防止这些情况并进行验证 例: 测试$\u GET['id']是否已设置,并且fr

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

现在我有一个php页面,看起来像:addfriend.php?id=friendid

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


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

您需要防止这些情况并进行验证

例:


测试$\u GET['id']是否已设置,并且friendid是否真实,您可以查询数据库以查看id是否存在…

您需要防止这些情况并进行验证

例:

测试$_GET['id']是否已设置,并且friendid是否真实,您可以查询数据库以查看id是否存在…

如果您的意思是“如果有人访问URI以获取不存在的id会发生什么情况?”,那么这取决于PHP所说的应该发生什么

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

如果您已经正确地设计了它,那么它将返回一个文档,说明您不能添加一个不作为好友存在的用户

事实上,如果您已经正确地设计了它,那么数据应该通过POST not GET发送,因为添加朋友不是幂等事件。(请参阅-GET应该没有副作用)

如果您的意思是“如果有人访问URI以获取一个不存在的id会发生什么情况?”,那么这取决于PHP所说的应该发生什么

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

如果您已经正确地设计了它,那么它将返回一个文档,说明您不能添加一个不作为好友存在的用户


事实上,如果您已经正确地设计了它,那么数据应该通过POST not GET发送,因为添加朋友不是幂等事件。(请参阅-GET应该没有副作用)

您需要验证用户输入。首先,将
$\u GET
值强制转换为int类型,如果该值等于
0
,则告诉他们输入错误

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

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

您需要验证您的用户输入。首先,将
$\u GET
值强制转换为int类型,如果该值等于
0
,则告诉他们输入错误

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

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

事实证明,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
}

事实证明,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
}

实际上,我现在正在提取$id并再次使用它,以查看该id是否存在于users下。如果没有,那么它会将页面重新路由到404。感谢您精心编写、深思熟虑的复制和粘贴评论。现在,这意味着什么?我实际上现在正在提取$id并再次使用它来查看该id是否存在于users下。如果没有,那么它会将页面重新路由到404。感谢您精心编写、深思熟虑的复制和粘贴评论。现在,这意味着什么?我实际上现在正在提取$id并再次使用它来查看该id是否存在于users下。如果没有,那么它会将页面重新路由到404。实际上,我现在正在提取$id并再次使用它来查看该id是否存在于users下。如果没有,那么它会将页面重新路由到404。实际上,我现在正在提取$id并再次使用它来查看该id是否存在于users下。如果没有,那么它会将页面重新路由到404。实际上,我现在正在提取$id并再次使用它来查看该id是否存在于users下。如果没有,它会将页面重新路由到404。。