0

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

客户

<?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";
}

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

我对选择持开放态度。如何让我的客户成为唯一能够从该服务器获取数据的客户?

4

2 回答 2

2

对于初学者,让客户端连接到 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
于 2013-12-05T21:07:37.603 回答
0

您也可以设置客户端证书,以便它使用客户端提供的证书进行身份验证。根据您要执行的操作,这可能有点矫枉过正。请参阅“客户端身份验证和访问控制”部分

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

于 2013-12-05T20:55:26.110 回答