代码之家  ›  专栏  ›  技术社区  ›  Sandeepan Nath

如何将表单发布到我的服务器,然后再发布到API,而不是直接发布(出于安全原因)?

  •  0
  • Sandeepan Nath  · 技术社区  · 14 年前

    有一个与API集成的在线课程。API希望我们将一个表单连同一个名为 customer_token 作为输入字段。它用于API的身份验证,每个客户站点都分配一个令牌。客户令牌实际上是域名、IP或其他内容的散列值。

    现在,在整合之后,他们希望我隐藏 客户机令牌 输入字段可以通过Mozilla的Firebug和类似的工具访问,因为任何人都可以看到令牌,并向API发送类似的表单,然后访问API的服务。不用说,API不是由一些专家开发的。他们以前没有意识到这个问题,它也不是一个广泛使用的API。

    我以前问过一个问题 Best way to hide a form input field from being accessed using firebug? 并且意识到通过get/post方法隐藏任何信息是不可能的。有人问我请求是直接发送到API,还是首先发送到我的服务器还是其他什么?

    请解释它是如何解决安全问题的,以及如何实现它?

    谢谢, 桑迪桑

    2 回复  |  直到 14 年前
        1
  •  0
  •   Lucas Jones    14 年前

    您可以将所有参数发布到API表单操作,但使用 customer_token 在脚本中添加了服务器端,客户端看不到。

    所以,你有你的原始形式:

    <form action="http://someapi.com/blah" method="POST">
        <input type="hidden" name="customer_token" value="foo">
        <input type="text" name="whatever">
        ...
    </form>
    

    而是使用:

    <form action="myapiblah.php" method="POST">
        <input type="text" name="whatever">
        ...
    </form>
    

    注意没有 客户机令牌 在第二个例子中。然后,在 myapiblah.php -明显地更改名称,特别是根据您使用的服务器端语言。如果您告诉我您使用的是什么,我可能会提供更具体的示例-使用类似于psuedo代码的代码:

    parameters = $_POST;
    parameters['customer_token'] = 'foo';
    send_http_request('POST', 'http://someapi.com/blah', parameters);
    

    您需要查找要用于什么的详细信息 send_http_request .

    在PHP中,如果可以使用 pecl_http PECL的东西:

    $params = $_POST;
    $params['customer_token'] = 'foo';
    
    $req = new HttpRequest('http://someapi.com/blah', HttpRequest::METH_POST);
    $req->addQueryData($params);
    try {
        $r->send();
        if ($r->getResponseCode() == 200) {
            // success!
        }
        else {
            // got to the API, the API returned perhaps a RESTful response code like 404
        }
    }
    catch (HttpException $ex) {
        // couldn't get to the API (probably)
    }
    
        2
  •  0
  •   Erhard Dinhobl    14 年前

    你问的是对的!表单是否首先转到Web服务器?这意味着站点发布到一个普通的URL上,Apache或OnOther Web服务器接受请求,或者表单发送到特定的服务(比如Web服务器,它也只是一个在端口80上侦听Web服务器的服务,大多数情况下)。如果在WebForm中隐藏字段,它是无用的。如果你看一下站点的源代码,你仍然可以看到隐藏的字段。!!