Предотвращение подделки HttpRequests - PullRequest
0 голосов
/ 29 апреля 2011

Я весь день искал способ выяснить это, но безуспешно, и я подумал, что, может быть, кто-то здесь может помочь?Я пытаюсь использовать секретный пароль в своем файле .Js, но я не могу записать его непосредственно в файл, потому что каждый мог видеть его при доступе к исходному коду.например, мне нужно отправить этот пароль с помощью ajax на другую страницу, чтобы убедиться, что запрос HttpRequest с моего веб-сайта, а не из другого кузнечного httprequest.
Это возможно, потому что я пробовал все остальное, например, формы аутентификации, но это не помогло.
Я использую asp.net и HttpHandler в качестве страницы, которая возвращает данные.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2011

Вот как это делается в MVC . К сожалению, это не выглядит так же, как то, что было сделано с безопасностью WebForms (по крайней мере, насколько я могу судить).

0 голосов
/ 29 апреля 2011

Что вы можете сделать, это сгенерировать ключ, который действителен до установленного времени, используя PHP, например:

$password = "some random string";
$key = md5($password . $_SERVER['REQUEST_TIME']) . "|" . $_SERVER['REQUEST_TIME'];

Таким образом, вы узнаете, когда ключ был сгенерирован, и был ли он подделан, потому что:

function check($key) {
    list($hash, $timestamp) = explode("|", $key, 2);
    if ($hash !== md5($password . $key)) {
        throw new Exception("Naughty!");
    }
    if ($timestamp < $_SERVER['REQUEST_TIME'] < 60*60) {
        throw new Exception("too old");
    }
}

Недостатком является то, что у людей, которые не обновляют страницу очень часто (в моем примере это 1 час), срок действия их ключа истекает.

Другая проблема заключается в том, что ваш«Злоумышленник» может технически сначала очистить страницу, чтобы получить новый ключ и использовать ее, а затем очистить снова, когда истечет срок его действия и т. д.

Это решение очень хорошо работает для защиты от хотлинкинга.

...