Запретить пользователям доступ к веб-странице через веб-браузер?

Мы с другом работаем над программой. Эта программа отправит данные GET на нашу веб-страницу. Однако мы не хотим, чтобы пользователи обращались к веб-странице каким-либо другим способом, кроме программы. Мы можем запретить пользователям делиться программой с помощью аутентификации HWID, но ничто не мешает им использовать сканер пакетов для получения URL-адреса веб-страницы. Мы думали об аутентификации пользовательского агента, которую мы реализуем, но пользовательские агенты легко подделать.

Итак, мой вопрос: как мы можем запретить пользователям доступ к веб-странице напрямую, а не через программу?

Даже если у вас нет полностью работающего ответа, все, что поможет им сдержать, было бы неплохо.

В настоящее время мы будем внедрять:

HWID Authentication для использования программы User-Agent Authentication для доступа к веб-странице. Мгновенный черный список IP-адресов для всех, кто обращается к веб-странице без надлежащего User-Agent


person Rob    schedule 18.04.2010    source источник
comment
Я не знаю, какое приложение вы создаете, но я бы долго и хорошо подумал, действительно ли мне нужно предотвращать доступ людей к моей службе через других клиентов, и если да, то есть ли нет ничего плохого в моей бизнес-модели. Что бы вы ни делали, реализация этого безопасным способом займет много времени и будет дорого. Это действительно необходимо?   -  person Pekka    schedule 18.04.2010
comment
@Pekka: Ну, я не хочу, чтобы мой продукт просочился и стал общедоступным. Если бы я использовал простую веб-страницу и не использовал методы аутентификации, людям не пришлось бы покупать продукт. Если я добавлю к нему имя пользователя и пароль, имя пользователя и пароли станут общими.   -  person Rob    schedule 18.04.2010
comment
Я не знаю вашего целевого рынка, но думаю, что выдача логинов - лучшее, что вы можете сделать. Если вы видите подозрительную активность (например, вход в одну и ту же учетную запись из трех разных стран в течение одного часа), у вас есть все средства, чтобы закрыть эту учетную запись. Какая разница, какого клиента они используют? И если это какое-либо программное обеспечение для бизнеса, большинство ваших клиентов будут слишком напуганы, чтобы выдавать свои личные учетные данные.   -  person Pekka    schedule 18.04.2010
comment
Вам следует сосредоточиться на создании хорошего программного обеспечения, а не на предотвращении кражи вашего приложения. Редакторы игр годами пытались заблокировать пользователей, и их защита все еще не работает в течение нескольких дней. Если ваше приложение будет полезным, люди его купят, а некоторые украдут.   -  person Guillaume    schedule 18.04.2010


Ответы (4)


Не полагайтесь на пользовательский агент или какой-либо отпечаток браузера, заголовки HTTP легко подделать / подделать.

Вы можете добавить к запросу секретный токен (например, пароль / логин) и отправить его через SSL, чтобы предотвратить подслушивание.

Или лучше используйте сертификат клиента SSL.

Редактировать Собираетесь ли вы распространять программу VB? Если это так, как сказал Бобинс, вы не сможете помешать решительному хакеру подделывать запросы. Вы можете поднять планку, но это будет безопасность через безвестность. Даже с клиентскими сертификатами хакер сможет извлечь сертификат из вашей программы и отправить измененные запросы.

Пока вы принимаете запросы от клиента, эти запросы могут быть подделаны. Смирись с этим.

person Guillaume    schedule 18.04.2010
comment
Да, мы думали об использовании SSL, за исключением того, что я понятия не имею об этом и не знаю, как сделать страницу доступной через SSL. - person Rob; 18.04.2010
comment
Да, полагаю. Или я мог бы использовать Google, где все бесплатно. - person Rob; 18.04.2010
comment
+1 Я могу придумать шифрование общения - единственный безопасный способ сделать это на полпути. - person Pekka; 18.04.2010
comment
В конце концов, конечно, ты никогда не сможешь выиграть. После того, как вы передадите копию программного обеспечения кому-то другому, у него будет вся информация (например, сертификат клиента), которая будет необходима для подключения к серверу. - person bobince; 18.04.2010
comment
@ Роб: Это зависит от того, сколько стоит ваше время. - person Heinzi; 18.04.2010

Один из вариантов - вы можете установить зашифрованный токен в заголовке запроса.

Токен можно использовать только один раз. Если тот же токен будет отправлен снова, сервер отклонит его, это означает, что вы должны поддерживать копию используемых токенов на стороне сервера.

person JChap    schedule 18.04.2010
comment
Поддерживать копии легко, я просто буду использовать базу данных MySQL. Мне все равно нужно сделать это для черного списка IP-адресов - person Rob; 18.04.2010
comment
Разве это не лучший способ, чем SSL ?? Потому что логика шифрования находится внутри приложения. Мы не сможем помочь, если ppl декомпилирует код! \ Кроме того, это дешевое решение ... вместо того, чтобы вкладывать деньги в сертификаты SSL! - person JChap; 18.04.2010
comment
Хорошая точка зрения. Одноразовый алгоритм может быть подвергнут обратному проектированию в один прекрасный день, но также могут использоваться ключи шифрования. - person Pekka; 18.04.2010

один из вариантов - использовать и проверять настраиваемый заголовок, который веб-браузер не отправляет, я сделал то же самое для своей собственной программы. Сделайте это поверх других проверок, которые вы делаете. На стороне сервера пусть ваш серверный скрипт проверит настраиваемый заголовок и просто перенаправит, если заголовок неправильный.

person Jim    schedule 18.04.2010
comment
Звучит хорошо, не могли бы вы подробнее рассказать, как я могу заставить веб-страницу проверять заголовок? Возможно, также уточнить, как отправить настраиваемый заголовок. Я занимаюсь PHP, мой приятель занимается VB.Net - person Rob; 18.04.2010
comment
Безопасность через неясность ... Что произойдет, если кто-то перехватит запрос и увидит этот настраиваемый заголовок? - person Guillaume; 18.04.2010
comment
в php на странице, которую ваша программа должна читать, используйте общедоступный массив HttpRequest :: getHeaders (), чтобы получить заголовки и проверить / varifiy имя и значение в vb. net с объектом запроса, который вы добавляете заголовок, вы не возвращаете какой-либо настраиваемый заголовок обратно в программу и просто перенаправляете, если проверка заголовка не удалась - person Jim; 18.04.2010
comment
Дело в том, что эти заголовки могут быть легко скопированы злоумышленником. На самом деле они не добавляют безопасности. - person Pekka; 18.04.2010

  • # P1 # # P2 #
    # P3 #
  • # P4 #
    # P5 #
person TheCodeArtist    schedule 18.04.2010