Как отправить форму на мой сервер, а затем в API, вместо того, чтобы отправлять напрямую (по соображениям безопасности)? - PullRequest
0 голосов
/ 28 августа 2010

Существует интеграция с API для проведения онлайн-уроков. API хотел, чтобы мы разместили форму на их сайте вместе с параметром customer_token в качестве поля ввода. Он используется для аутентификации API, и каждому клиентскому сайту назначается один токен. Маркер клиента на самом деле представляет собой хешированное значение доменного имени или IP-адреса или что-то в этом роде.

Теперь, после интеграции, они хотят, чтобы я каким-то образом скрыл поле ввода customer_token от того, чтобы оно было доступно через firebug mozilla и аналогичные инструменты, потому что любой может увидеть токен и отправить подобную форму в API и получить доступ к службе API , Само собой разумеется, API не разработан некоторыми экспертами. Они не понимали проблему раньше, и это не широко используемый API.

Ранее я задавал вопрос о Лучший способ скрыть поле ввода формы от доступа с помощью firebug? и понял, что невозможно скрыть какую-либо информацию с помощью метода get / post. Кто-то спросил меня о том, отправляется ли запрос напрямую в API, или сначала на мой сервер или что-то еще?

Пожалуйста, объясните, как это решает проблему безопасности и как ее реализовать?

Спасибо, Sandeepan

Ответы [ 2 ]

0 голосов
/ 28 августа 2010

Вы спросили, что вы правы!форма идет сначала на веб-сервер?это означает, что сайт размещается по обычному URL-адресу, для которого Apache или другой веб-сервер принимает запрос или отправляет ли форма определенным службам (например, веб-серверу, который также является только службами, которые прослушивают порт - порт 80 для веб-серверов,в основном).если вы прячете поле в веб-форме, это бесполезно.Если вы посмотрите на исходный код сайта, вы все равно увидите скрытое поле. !!

0 голосов
/ 28 августа 2010

Вы можете отправить POST на свой сервер, который в сценарии POST помещает все параметры в действие формы 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>

Обратите внимание, что во втором примере нет customer_token. Затем в myapiblah.php - измените имя, очевидно, особенно в зависимости от используемого вами языка на стороне сервера. Я мог бы привести более конкретные примеры, если вы скажете мне, что вы используете - используйте что-то вроде этого псевдо-кода:

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