【问题标题】:How to make my PHP client be the only one that can get data from my PHP server如何使我的 PHP 客户端成为唯一可以从我的 PHP 服务器获取数据的客户端
【发布时间】:2013-12-06 05:12:57
【问题描述】:

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

客户

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

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

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

【问题讨论】:

  • 只有一个?只需输入密码...if($_POST["password"]!="secret") die()
  • 解释其他人概述的解决方案的最佳方式是,当您真正需要一个基本门时,您正在讨论创建一个复杂的锁。意思是,简单地强制使用授权令牌就像对你的类进行编码一样,只有在传递了密钥时才放弃信息。很简单。

标签: php security curl spoofing key-pair


【解决方案1】:

首先,让客户端连接到 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2013-08-06
      • 2020-08-16
      • 2014-03-17
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      相关资源
      最近更新 更多