Пожалуйста, спасибо за упражнения для разминки ума.
[QUOTE]
Programmer пишет:
его имя модифицировать при обнаружении во входящей папке, используя часы сервера.[/QUOTE]Да, лучше использовать часы сервера. В принципе не обязательно модифицировать имя файла - вместо папки отработанных еще лучше будет сохранять время обработки (по серверу) в базе данных. К Delphi прекрасно подходит Interbase/Firebird базы данных, к PHP (об этом ниже) подойдет mysql(обычно быстрее, включена в xampp) или odbc (версия на основе Microsoft Access файла включена в MS Office, если его нет можно скачать MDAC (Microsoft Data Access Components) отдельно, тут меньше закидонов при написании запросов чем в mysql).
Сохраненные времена сервера, номер клиента, месяц/год запрашиваемых данных можно использовать как журнал - кто, что и сколько раз запрашивал. Соответственно ограничивать "ретивых" более гибкими условиями - например, обрабатываются запросы без интервалов по времени, но не более 10 за последний час или 100 за месяц. Или игнорировать и удалять запрос если сочетание месяц/год недавно запрашивалось.
[spoil:1yxt1t77]Естественно по почте без интервала отправлять немного рискованно, но если ли за одну обработку нашлось несколько запросов от одного клиента, то их все можно зацепить к одному письму. А на следующую обработку уже применять интервал игнорирования в 5 минут, пройдет 5 минут зацепить остальные (если по количественным ограничениям проходят, а если не проходят, то либо игнорировать пока количественное ограничение не сработает либо удалять).[/spoil:1yxt1t77]
[QUOTE]
Programmer пишет:
Время обработки определяется только по имени файла, но клиент этот файл не видит, так как содержимое будущего файла записывается в строку (память), а потом строка сохраняется, как файл непосредственно на FTP.[/QUOTE]В этом случае возможно еще удобнее будет отправлять http запрос вместо файла. [spoil:1yxt1t77]Из описания схемы было неясно запрашивается ли пароль на FTP, но если запрашивается и у все одинаков - это тоже потенциальная дыра в безопасности. С другой стороны, я избегаю использовать IIS (может это предубеждение, но раньше в нем было столько дыр безопасности, что до сих пор ему не доверяю). Тут дело еще в том, что практически в любом пакете совмещающем http и прием файлов (по http или ftp в том числе) есть риск безопасности при загрузке файлов в доступное через http место.
Плюс http в том, что тогда можно сразу клиенту ответить, что запрос игнорируется из-за слишком частых запросов. Кроме того, можно динамически изменять различные секретные коды. То есть использовать номер клиента первый раз чтобы получить код, потом код можно потом использовать как (одноразовую?)замену паролю и номеру клиента. Если код не подошел то использовать номер клиента еще раз.[/spoil:1yxt1t77]
В принципе, можно вообще уйти от прошивки данных в программу (пришел собственник, его email "оператор" зарегистрировал, при регистрации сразу высылать программку)[spoil:1yxt1t77]При отсутствии файла конфигурации (первом запуске) спрашивать почту, которую собственник сообщил УК при получении программки и соответственно записывать в файл конфигурации 2 email (изначальный вместо номера клиента и последний введенный - для получения данных на него) и запросить по http проверку изначального email от сервера. На стороне сервера искать по базе данных изначальный email и получать номер клиента. Если нашелся - возвращать программке сгенерированный одноразовый код (код, номер клиента и время его выдачи сохранять в базе сервера в отдельной таблице), если не нашелся - возвращать программке ошибку, о чем программка выдаст сообщение "Email не зарегистрирован" собственнику .
При запросе данных - указывать одноразовый код, месяц/год запрашиваемых данных и новый email, данные можно передать в теле POST запроса. На сервере искать код и по нему определять номер клиента и время выдачи кода. Если не нашелся или истек - выдавать ошибку, по которой программка снова проверит изначальный email и получит новый код, потом повторит запрос данных. Если нашелся - сгенерируем, сохраняем, выдаем в ответ новый одноразовый код, старый код удаляем из таблицы, затем передаем запрос на исполнение или сохраняем в файл как раньше.
Минус - придется написать скрипт на PHP (тут можно скачать пакет xampp portable с уже настроенным совмещением PHP и Apache и наконец заглушить IIS чтобы не создавал дыр). Из PHP можно запускать переделанную на параметры командной строки вместо имен файлов "старую" программку (тогда станет недоступным совмещение нескольких запросов в 1 письмо нескольких запросов) или как ранее сохранять файлы из PHP в недоступную по http папку для обработки программкой по таймеру.[/spoil:1yxt1t77]
[QUOTE]
Programmer пишет:
Таким образом, некоторая защита от профанов имеется, а "волкам", которые это взломают будет жаль потраченного времени.[/QUOTE]Я придерживаюсь такого же мнения, что от направленного взлома специалистом ("волком") мало что поможет. Такой не только программку раскрутит на винтики, но и сервер запросто возьмет под контроль через уязвимости IIS.
С другой стороны, дополнительно затруднить взлом "профанам" не помешает. Не так уж и сложно перенести критичные операции на сторону сервера.[QUOTE]
Programmer пишет:
У меня есть карта СБ РФ. Если я попробую "оплатить" какую-либо услугу своего соседа (и не только) из своего личного кабинета на сбербанк-онлайн, то я могу узнать о его долгах за эту услугу.[/QUOTE]Это везде у нас такая "секретность", на уровне защиты от профанов, которые этого не пробовали сделать, не удивительно.