繁体   English   中英

如何使我的PHP客户端成为唯一可以从我的PHP服务器获取数据的客户端

[英]How to make my PHP client be the only one that can get data from my PHP server

你好,我有这个简单的代码:

客户

<?php

function get_url($request_url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $request_url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$request_url = 'http://localhost:8080/vb/dashboard/Marketing_dashboard/vb_server.php?function=somefunction';
$response = get_url($request_url);

print_r($response);

服务器

if(isset($_GET['function']) && $_GET['function'] == 'somefunction')
{
    echo somefunction();
}
function somefunction()
{
    return "this is the output of the server";
}

现在我需要添加安全性,以便只有我的客户端才能获取数据。 我想到了一对密钥,所以我发送一些带有客户私钥的哈希,并用服务器上的公钥对其进行解码。 但我不知道如何实现这一点。 我不知道如何获取密钥,我不知道如何做代码。

我愿意接受选择。 如何让我的客户端成为唯一能够从该服务器获取数据的客户端?

对于初学者,让客户端连接到https端点,以便加密。 接下来,您可以通过HTTP标头传递令牌并在客户端进行检查。

Rackspace API使用以下标头:

X-Auth-Token:asdflkjasdflkjasdflkjsadflkjasdf

然后你可以抓住标题,验证令牌是否正确。 如果是,请执行该功能。 如果没有,请返回空白页或其他内容。

你会像这样设置标题:

curl_setopt($c, CURLOPT_HTTPHEADER, array('X-Auth-Token: asdflkjasdflkjasdflkjsadflkjasdf'));

检查如下:

$headers = getallheaders();
if($headers['X-Auth-Token'] == 'asdflkjasdflkjasdflkjsadflkjasdf')
{
  if(isset($_GET['function']) && $_GET['function'] == 'somefunction')
  {
      echo somefunction();
  }
}
else
{
  echo "BAD TOKEN!";
}

function somefunction()
{
    return "this is the output of the server";
}

测试输出:

root@app01:/var/www/vhosts/application# curl -s http://localhost/headers.php -H "X-Auth-Token: asdflkjasdflkjasdflkjsadflkjasdf"

User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4   libidn/1.23 librtmp/2.3
Host: localhost
Accept: */*
X-Auth-Token: stuff

BAD TOKEN!


root@app01:/var/www/vhosts/application# curl -s http://localhost/headers.php -H "X-Auth-Token: asdflkjasdflkjasdflkjsadflkjasdf"

User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Host: localhost
Accept: */*
X-Auth-Token: asdflkjasdflkjasdflkjsadflkjasdf

DO STUFF

您还可以设置客户端证书,以便它使用客户端提供的证书进行身份验证。 取决于你想要做什么,这可能有点矫枉过正。 请参阅“客户端身份验证和访问控制”部分

http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM