使用PHP从外部服务器验证MySQL数据库中的信息

时间:2011-10-11 15:28:27

标签: php mysql database connection external

我不太熟悉PHP的mysql_connect如何工作,但可以编写非常基本的脚本。我参加了论坛管理员论坛,我们得到了托管公司的合作伙伴关系。

此合作伙伴关系涉及我们的活跃成员从该服务托管软件包的折扣。托管所有者建议他为这个特定的软件包设置一个“隐藏的URL”,但我觉得如果他们发现了这个URL,我们论坛的非成员可能会滥用它。

所以我建议我们安装一个脚本,在主机网站上输入用户输入的凭据(用户名和密码),并将这些信息与我们的数据库交叉引用(显然是在一个单独的服务器上)以寻找匹配,以及检查用户是否被激活并且至少有100个帖子,并且只有当所有if语句都返回true时,才会对用户进行身份验证并授予对托管包的访问权限。

我知道如何验证数据,但我不知道如何访问服务器外部的数据库,我做了一些谷歌搜索,我发现的信息只会让我感到困惑。

3 个答案:

答案 0 :(得分:1)

MySQL可以通过与连接到本地主机服务器相同的方式连接到外部服务器:

$conn = mysql_connect('external-server.hostname.example.com', $user, $password);
mysql_select_db($database_name);

外部服务器必须允许通过其防火墙从发出请求的Web服务器进行MySQL连接,并且必须有一个用户webserveruser@webserver-hostname才能访问需要查询的数据库。

在外部服务器上,假设您只需要读取(SELECT)对表的访问权限:

GRANT SELECT ON databasename.tablename TO `webserveruser`@`webserver-hostname` IDENTIFIED BY 'thepassword';

答案 1 :(得分:0)

似乎最简单的解决方案是让托管公司单独向每个人发送一个长而独特的网址,例如

http://www.myhostingservice.com/refer/80ddca50-f41e-11e0-be50-0800200c9a66/

点击此链接会将您带到他们的注册/购买页面,在那里您将获得特殊折扣,然后在购买后,链接将变为无效或无效,因此没有其他人可以使用它。有人不可能随意猜出网址。

这比尝试让sysadmins直接访问他们的数据库容易得多。唯一的另一种选择是数据库/论坛系统管理员编写一个PHP API脚本,托管服务可以安全地使用它来检查数据库的凭据,而数据库系统管理员不需要透露有关数据库的重要安全细节。

答案 2 :(得分:0)

您应该能够从主机到主机远程访问任何mysql数据库。我个人认识我,他让他们提供远程连接,他们问我要访问它的具体IP地址。

如果您对如何实现所需的用户形式/验证感到困惑,那么我已经将一些代码组合在一起 - 正如您所说的PHP知识有限。< / p>

假设您有一个与此类似的登录表单

<form action="post" method="checklogin.php">
<input type="username" name="username_input" />
<input type="password" name="password_input" />
<input type="submit" value="Validate Login" name="do_validation" />
</form>

这是checklogin.php的一些PHP代码,我和//评论一起引导你:

// Get the form data
if ($_POST['do_validation'])
{
    // The correct form was posted, get the form data
    $username = mysql_real_escape_string($_POST['username_input']);
    $password = mysql_real_escape_string($_POST['password_input']);

    // Connect to the database
    mysql_connect ("http://91.0.0.1", "myUsername", "myPassword");

    // Select database
    mysql_select_db('remote_table_name');

    // Check the username and password against database
    $check_credentials = mysql_query("SELECT user_id FROM users WHERE username='$username' AND password='$password'");

    // Check that user exists
    if (mysql_num_rows($check_credentials) == 1)
    {
        $existing_user = mysql_fetch_assoc($check_credentials);
        $existing_user_id = $existing_user_id['user_id'];

        // The user exists, now get ID of posts from another table, using their 'user_id'
        $check_posts = mysql_query("SELECT post_id FROM posts WHERE user_id='$existing_user_id'");

        // Check the number of posts is at least 100
        if ($check_posts >= 100)
        {
            // The user has 100 posts OR MORE
            echo "You are a valid user";

            // Here you could start a session for the user (logging them in), and then show the data that you want

            session_start();
            // Store the user_id of the user in a SESSION
            $_SESSION['user_id'] = $existing_user_id;
        }
    }
}

上面的代码未经测试,几乎不包含任何安全机制,也没有验证。

但它符合您建议的保护表单的标准。