与用于进行实时在线课程的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
答案 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)