Собственно сабж, как организовать? Т.е. нужно чтоб при запросе на http://<some-host>/<some-text> выдавались данные только один раз и чтоб подобрать этот <some-text> было крайне тяжело. Есть соображения по этому поводу, но они упираются в реализацию. Теоретически если писать на winsock то можно привязаться к порту соединения (т.к. получателю он также известен через $_SERVER['REMOTE_PORT']) и кодировать некую сигнатуру используя порт как ключ. Но вся проблема в том, что используется wininet и всё упёрлось в то, чтоб узнать номер порта с которого отправляется этот самый запрос. Для этих целей есть специальная ф-ция InternetQueryOption вызвав которую с INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO можно получить структуру типа: Код (Text): typedef struct { DWORD_PTR Socket; DWORD SourcePort; DWORD DestPort; DWORD Flags; }INTERNET_DIAGNOSTIC_SOCKET_INFO Но тут опять подводные камни: 1. MSDN учит что вызывать её можно только , т.е. это значит что запрашиваемый URI был отдан, а нам же его нужно ещё зашифровать! 2. Даже при вызове этой ф-ции после HttpOpenRequest получаем структуру где Socket = -1 и все остальный поля = 0. Как быть?
Сервер должен отвергнуть те запросы, иницатором которых выступает левое клиентское приложение. Вот пример: Есть некоторая программа которая обращается на некий сайт GET /linkAAA, сервер это принимает т.к. соединение с клиентской стороны установлено на порт AAA. Далее пользователь увидив такую ссылку в сниффере также пытается выполнить этот-же запрос, но должен получить что-то вроде [ 404 ], т.к. в его случаи уже у него уже будет другой порт. Далее пользователь умный думает попробую ка я вызвать /linkBBB и ему опять выдаётся [ 404 ], т.к. опять не угадал порт. Т.е. теоретичекси подобрать порт можно будет, но никто этим заниматься точно не будет.
SLayer0 Привязка к порту - не лучший способ, тк, количество портов ограничено, и написать простенькую утилитку, которая переберт все - даже школьник сможет. На твоем месте, я бы смотрел в сторону асинхронного шифрования.
zeroday _DEN_ Немного не то, вы предлагаете зашифровать имеющиеся данные своим кеем и отправить уже типа шифрованныей запрос и получть ответ, но скажем HttpAnalyzer прекрасно перехватит эти данные и через его утилитку HttpBuildRequest можно будет отправит один в один те-же данные и получить один в один тот-же ответ, а такое неприемлемо. В случаи с портами вероятность того, что совпадёт порт, мнимальна и мало кому прийдёт в голову что сам запрос "/URI" был сформирован исходя из данных о соединении.
Не совсем понял что требуется, но не вижу проблемы. some-text - большое чило - ID (GUID). Если кто-то уже обратился по ссылке, то грохаем этот ID. Думаю на каком-нибудь PHP, это не сложно сделать.
Booster а если их (обращающихся) очень много, соответсвенно ID тоже будет очень много, неохотно хранить их всех в базе или где-то ещё. Требуется чтоб программа всегда генерила уникальную ссылку, заходила по ней и получала данные. А другие при попытке зайти на эту ссылку посылалсиь куда подальше и наугад вбитые новые ссылки тоже посылалсиь куда побальше.
Booster Ну допустим я .. ты... видим что программа ломиться на http://<some-host>/ABCDEFABCDEFABCDEFABCDEFABCDEF и получает данные через обычный GET. Берём втыкаем эту же ссылку в свой браузер и получаем PAGE NOT FOUND к примеру.
Отправляешь запрос серваку, он возвращяет соль. Смешиваешь соль с паролем, делаешь хеш и отправляешь запрос на скачку. И так каждый раз.
Booster Некая программа заходит по сгенерированной ссылке нормально, все посейдующие попытки зайти по этойже ссылке будут неудачныим. Вот как относится...
Сколько это «много»? Даже для миллиона id (сгенерированных, но не использованных ссылок) одновременно это всего лишь несколько мегабайт.
Запросов скажем так к серверу идёт около сотни в секунду, если все хранить у себя да ещё и проверять не повторяется ли он при каждом запросе это бует накладно. 100* 3'600 * 24 = 8'640'000 запросов в сутки...для каждого хранить ID на несколько байт, база выростет за неделю до гигантских размеров и ДЛЯ КАЖДОГО запросо пробегаться по всей базе искать совпадения - скажем мягко плохой тон.
Я не совсем понимаю зачем хранить много. Достаточно одной, как-только кто-то заюзал - меняем. Хотя я так и не понял, что именно нужно.
Та просто кодируй содержимое ответа. Т.к. ты написал то это защита от юзеров. Тут шифрование подойдет. Любой другой метод если захотят то расковыряют твою клиенсткую программу и все, твои изыскания будут бесполезны.