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

时间:2010-08-28 10:39:29

标签: web-applications forms-authentication security

与用于进行实时在线课程的API集成。 API希望我们将表单和名为customer_token的参数作为输入字段发布到他们的站点。它用于API的身份验证,并为每个客户站点分配一个令牌。客户令牌实际上是域名或IP的某些哈希值。

现在,在集成之后,他们希望我以某种方式隐藏customer_token输入字段,以便通过mozilla的firebug和类似工具进行访问,因为任何人都可以看到令牌并向API发送类似的表单并访问API的服务。不用说,API不是由一些专家开发的。他们以前没有意识到这个问题,也没有广泛使用的API。

我之前在Best way to hide a form input field from being accessed using firebug?上提出了一个问题,并意识到无法通过get / post方法隐藏任何信息。有人问我这个请求是直接发送到api,还是先发送到我的服务器或什么的?

请解释如何解决安全问题以及如何实施?

谢谢, Sandeepan

2 个答案:

答案 0 :(得分:0)

您可以POST到您的服务器,在脚本中,将所有参数POST到API表单操作,但在您的脚本中添加customer_token,服务器端,哪些客户端无法看到。< / p>

所以,你有原始形式:

<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>

请注意,第二个示例中没有customer_token。然后,在myapiblah.php中 - 显然更改名称,尤其是取决于您正在使用的服务器端语言。如果你告诉我你使用的是什么,我可以提供更具体的例子 - 使用像这样的伪代码:

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

您需要查看send_http_request的使用细节。

在PHP中,如果你可以使用PECL中的pecl_http内容,你会做这样的事情:

$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)
}

答案 1 :(得分:0)

你问你是对的!表格首先发送到网络服务器吗?这意味着网站发布到普通网址,其中apache或其他网络服务器接受请求,或者表单是否转到特定服务(如网络服务器,也只是一个侦听端口的服务 - 端口80用于网络服务器,大多)。如果你在webform中隐藏一个字段,它就没用了。如果你看看网站的源代码,你仍然可以看到隐藏的字段。!!