如果用户从特定IP连接,PHP仅显示表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果用户从特定IP连接,PHP仅显示表单相关的知识,希望对你有一定的参考价值。

在我的网站上,我有能力让用户向我发送消息。它存储在一个mysql数据库中。

网址是这样的:www.mysite.com/contact?id=4ijr3943jwswER4we(最后作为id的一些随机哈希)

我有能力,如果我去这个网址并查看消息,那么输入框会显示,它只允许我直接从该页面回复消息。它通过检查用户连接的IP是否是我的IP来完成此操作。

我发现我的IP是动态的,因此每当我的ip被重新分配时,我就再也看不到这个输入形式了(因为我现在从不同的IP连接)。

有没有办法(除了在我的机器上设置静态IP)以实现同样的目标?显然,检查IP并不是一个长期的解决方案,而且我已经读过你也无法获取用户的MAC地址。

如果重要的话,这是我检查IP的代码:

function getClientIP() {

    $ipaddress = '';

    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    }
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else if(isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    }
    else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    }
    else if(isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    }
    else if(isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    }
    else {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}

并通过以下方式检查:

if((getClientIP() == "::1" || getClientIP() == "<my ip>") {
    // show an input box and submit button
}

谢谢!

答案

忽略公然无视的安全性以及我会解雇某人这样做但你可以在网址中输入&admin = $的事实。像这样的东西。

function is_admin() {

    $password = filter_input(INPUT_GET, "password", FILTER_SANITIZE_EMAIL);

    if ($password == "abc123") {
        return TRUE;
    } else {
        return FALSE;
    }
}

所以你可以用is_admin()替换getClientIP()

if(is_admin()) {
    // show an input box and submit button
}

然后像这样调用它。

http://www.example.com/contact?id=4ijr3943jwswER4we&admin=abc123

再次,这是一个非常不安全的解决方案,你应该使用PKI与ssh端口转发VPN连接,但这可行,但我是一个简单的10点答案的吸盘。

另一答案

您可以尝试使用免费的动态DNS服务。设置域名,例如“MINE.COM”,并使用它代替您的IP。当您的IP更改时,应调整动态DNS服务,以便将MINE.COM更改为指向新IP。您的站点可以检查客户端是否有MINE.COM而不是IP。

请注意,存在滞后时间。在“MINE.COM”反映更新的IP之前可能需要几分钟或几小时。此外,大多数“免费”服务涉及广告,可能会导致您的设置无法使用。

底线,没有静态IP,你几乎被冲洗了。静态IP肯定是可能的,但通常成本更高,因为通常只有像学校,政府或企业这样的大型问题需要或需要。

我建议您使用其他方法进行调查,例如登录表单,密码,会话,cookie等。例如,以管理员帐户登录,在您的设备上建立cookie,然后在您下次访问该站点时,它可以进行身份​​验证你设备的cookie。

以上是关于如果用户从特定IP连接,PHP仅显示表单的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8 Autocomplete Broken - 仅显示有限的用户代码片段 - 知道为啥吗?

Delphi,可以仅将表单模式设置为特定的父表单吗?

使用PHP取得用户IP地址的所在地区

php通过记录IP来防止表单重复提交方法分析

ms-access:仅显示特定日期内记录的报告

如何将出生日期从数据库显示到表单并在 php 和 PDO 中更新?