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

Web applications 如何将表单发布到我的服务器,然后发布到API,而不是直接发布(出于安全原因)?,web-applications,forms-authentication,security,Web Applications,Forms Authentication,Security,有一个与API的集成,用于进行实时在线课程。API希望我们将一个表单和一个名为customer\u token的参数作为输入字段发布到他们的站点。API使用它进行身份验证,并为每个客户站点分配一个令牌。客户令牌实际上是域名或IP或其他内容的散列值 现在,在集成之后,他们希望我以某种方式隐藏customer\u token输入字段,使其无法通过mozilla的firebug和类似工具访问,因为任何人都可以看到该令牌,并向API发送类似的表单,访问API的服务。不用说,API不是由一些专家开发的。他

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

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

我之前问过一个问题,并意识到不可能通过get/post方法隐藏任何信息。有人问我请求是直接发送到api,还是先发送到我的服务器或其他什么

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

谢谢,
SandePan

您可以发布到服务器,服务器在脚本中,将所有参数发布到API表单操作,但在脚本中添加了客户端看不到的
customer\u令牌

因此,您有您的原始表单:

<form action="http://someapi.com/blah" method="POST">
    <input type="hidden" name="customer_token" value="foo">
    <input type="text" name="whatever">
    ...
</form>
您需要查找有关“发送http\u请求”的详细信息

在PHP中,如果可以使用pecl中的
pecl\uhttp
内容,您可以这样做:

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

你问你的答案是对的!表单是否首先进入Web服务器?这意味着站点发布到一个普通的url,apache或onother Web服务器为其接收请求,或者表单发送到一个特定的服务(比如Web服务器,它也只是一个在端口80上侦听Web服务器的服务)。如果在webform中隐藏一个字段,则它是无用的。如果你看一下网站的源代码,你仍然可以看到隐藏的字段

这就是我要找的。。我不知道发送http请求函数。是的,我也在PHP上工作。非常感谢。@Sandepan:实际上没有
send\u http\u request
函数-我只是在psuedocode中使用了它。:)然而,在答案的最后,您应该能够在PHP上构建。
parameters = $_POST;
parameters['customer_token'] = 'foo';
send_http_request('POST', 'http://someapi.com/blah', parameters);
$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)
}