.NET Как запретить REST запросы вне веб приложения?
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
.NET Как запретить REST запросы вне веб приложения?
Я тут топик про ArcGIS недавно открыл. Это по той же теме, но вопрос поставлю по другому.
Есть веб сервер, который исполняет REST запросы клиентов. Запросы требуют аутентификации. Назовем условно это сервер WEB_REST.
Есть другой сервер, с которого который запускается Silverlight приложение. Назовем его WEB_Silverlight. Это приложение и шлет REST запросы к WEB_REST.
Задача - не исполнять REST запросы, которые пришли не от WEB_Silverlight, например, пользователь ручками набрал запрос в браузере. Что и как нужно сконфигурировать?
Спасибо.
Есть веб сервер, который исполняет REST запросы клиентов. Запросы требуют аутентификации. Назовем условно это сервер WEB_REST.
Есть другой сервер, с которого который запускается Silverlight приложение. Назовем его WEB_Silverlight. Это приложение и шлет REST запросы к WEB_REST.
Задача - не исполнять REST запросы, которые пришли не от WEB_Silverlight, например, пользователь ручками набрал запрос в браузере. Что и как нужно сконфигурировать?
Спасибо.
- Victor Okunev
- Маньяк
- Сообщения: 4131
- Зарегистрирован: 05 сен 2006, 11:50
- Откуда: Москва->Port Moody
Re: .NET Как запретить REST запросы вне веб приложения?
Наверняка WEB_Silverlight добавляет в свой HTTP request какие-то свои headers. Можно сконфигурировать WEB_REST, чтобы он пропускал запросы только с этими headers.Димас писал(а):Я тут топик про ArcGIS недавно открыл. Это по той же теме, но вопрос поставлю по другому.
Есть веб сервер, который исполняет REST запросы клиентов. Запросы требуют аутентификации. Назовем условно это сервер WEB_REST.
Есть другой сервер, с которого который запускается Silverlight приложение. Назовем его WEB_Silverlight. Это приложение и шлет REST запросы к WEB_REST.
Задача - не исполнять REST запросы, которые пришли не от WEB_Silverlight, например, пользователь ручками набрал запрос в браузере. Что и как нужно сконфигурировать?
Спасибо.
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
Re: .NET Как запретить REST запросы вне веб приложения?
Ok, how to configure WEB_REST?Victor Okunev писал(а):Наверняка WEB_Silverlight добавляет в свой HTTP request какие-то свои headers. Можно сконфигурировать WEB_REST, чтобы он пропускал запросы только с этими headers.
- Victor Okunev
- Маньяк
- Сообщения: 4131
- Зарегистрирован: 05 сен 2006, 11:50
- Откуда: Москва->Port Moody
Re: .NET Как запретить REST запросы вне веб приложения?
Это зависит от конкретного HTTP сервера. Пример для IIS: http://www.iis.net/ConfigReference/syst ... canHeadersДимас писал(а):Ok, how to configure WEB_REST?Victor Okunev писал(а):Наверняка WEB_Silverlight добавляет в свой HTTP request какие-то свои headers. Можно сконфигурировать WEB_REST, чтобы он пропускал запросы только с этими headers.
- Gadi
- Графоман
- Сообщения: 18502
- Зарегистрирован: 18 апр 2007, 11:33
Re: .NET Как запретить REST запросы вне веб приложения?
Сделай все REST методы POST вместо GET - уже в браузере не понабираешь.
Ну, или добавляй к query string какой-нибудь коротко живущий токен, который на web_rest будет проверяться перед исполнением запросов.
Ну, или добавляй к query string какой-нибудь коротко живущий токен, который на web_rest будет проверяться перед исполнением запросов.
- Gadi
- Графоман
- Сообщения: 18502
- Зарегистрирован: 18 апр 2007, 11:33
Re: .NET Как запретить REST запросы вне веб приложения?
Можно еще файервол рулс прописать для web_rest, чтобы он работал только с web_silverlight. Но это уже к админам.
- Stanislav
- Mr. Minority Report
- Сообщения: 45504
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: .NET Как запретить REST запросы вне веб приложения?
А если там кучка виртуальных веб сайтов?Gadi писал(а):Можно еще файервол рулс прописать для web_rest, чтобы он работал только с web_silverlight. Но это уже к админам.
- Stanislav
- Mr. Minority Report
- Сообщения: 45504
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: .NET Как запретить REST запросы вне веб приложения?
ХиGadi писал(а):Сделай все REST методы POST вместо GET - уже в браузере не понабираешь.

Про Винды и веб сервис не знаю, но Альфреско и Зимбра сначала аутентифицируют пользователя, генерируют токен, а потом к каждому запросу пристегивается этот токен. После сеанса токен инвалидируется.Gadi писал(а): Ну, или добавляй к query string какой-нибудь коротко живущий токен, который на web_rest будет проверяться перед исполнением запросов.
Для веб сервиса наверное придется предусмотреть периодическое обновление токена.
- Gadi
- Графоман
- Сообщения: 18502
- Зарегистрирован: 18 апр 2007, 11:33
Re: .NET Как запретить REST запросы вне веб приложения?
ну да, защита от непродвинутых детейStanislav писал(а):ХиGadi писал(а):Сделай все REST методы POST вместо GET - уже в браузере не понабираешь.![]()

похоже, веб сервисы сделаны для "внутреннего" потребления. Ну так и ПЕРЕД запросом генерить токен, записывать его в бд, присоединять к запросу. Веб сервис проверяет токен на валидность в бд, (если все впорядке) выполняет запрос, удаляет токен.Stanislav писал(а):Про Винды и веб сервис не знаю, но Альфреско и Зимбра сначала аутентифицируют пользователя, генерируют токен, а потом к каждому запросу пристегивается этот токен. После сеанса токен инвалидируется.Gadi писал(а): Ну, или добавляй к query string какой-нибудь коротко живущий токен, который на web_rest будет проверяться перед исполнением запросов.
Для веб сервиса наверное придется предусмотреть периодическое обновление токена.
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
Re: .NET Как запретить REST запросы вне веб приложения?
Веб сервисы не мои, это некий ESRI ArcGIS Server. Токены там поддерживаются, все так и работает, как описывалось в предыдущем посте. Проблема в том, что ESRI клиентские программы тоже понимают токены, т.е. клиент только введет своё имя/пароль и клиент получит токен от сервера. Пользователь даже не узнает, что там токены передаются.
Похоже фильтрация headers решит проблемму. Точнее, я собираюсь использовать REFERER. Если REFERER не соответствует URL с которого запускается Silverlight или REFERER вообще пустой, то запрос будет прерван. Это называется URL Rewrite Module для IIS.
http://learn.iis.net/page.aspx/461/crea ... te-module/
Вроде должно работать.
Похоже фильтрация headers решит проблемму. Точнее, я собираюсь использовать REFERER. Если REFERER не соответствует URL с которого запускается Silverlight или REFERER вообще пустой, то запрос будет прерван. Это называется URL Rewrite Module для IIS.
http://learn.iis.net/page.aspx/461/crea ... te-module/
Вроде должно работать.
- Stanislav
- Mr. Minority Report
- Сообщения: 45504
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: .NET Как запретить REST запросы вне веб приложения?
Уууууу, флаг в руки, скейт в ноги и икарус навстречу.... Мы исследовали (пару-тройку лет назад) referer на предмет его заполнябельности различными браузерами - далеко не все и не всегда заполняют это поле... Так что намучаетесь с клиентами... Хотя может сейчас это поле уже стало обязательным?Димас писал(а):Веб сервисы не мои, это некий ESRI ArcGIS Server. Токены там поддерживаются, все так и работает, как описывалось в предыдущем посте. Проблема в том, что ESRI клиентские программы тоже понимают токены, т.е. клиент только введет своё имя/пароль и клиент получит токен от сервера. Пользователь даже не узнает, что там токены передаются.
Похоже фильтрация headers решит проблемму. Точнее, я собираюсь использовать REFERER. Если REFERER не соответствует URL с которого запускается Silverlight или REFERER вообще пустой, то запрос будет прерван. Это называется URL Rewrite Module для IIS.
http://learn.iis.net/page.aspx/461/crea ... te-module/
Вроде должно работать.
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
Re: .NET Как запретить REST запросы вне веб приложения?
All users will use IE 8 or FireFox only. Did you have the issue with that browsers?Stanislav писал(а):Уууууу, флаг в руки, скейт в ноги и икарус навстречу.... Мы исследовали (пару-тройку лет назад) referer на предмет его заполнябельности различными браузерами - далеко не все и не всегда заполняют это поле... Так что намучаетесь с клиентами... Хотя может сейчас это поле уже стало обязательным?
- Stanislav
- Mr. Minority Report
- Сообщения: 45504
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: .NET Как запретить REST запросы вне веб приложения?
В то время не было ни ИЕ8 ни ФайрФокса8... Попробуйте...Димас писал(а):All users will use IE 8 or FireFox only. Did you have the issue with that browsers?Stanislav писал(а):Уууууу, флаг в руки, скейт в ноги и икарус навстречу.... Мы исследовали (пару-тройку лет назад) referer на предмет его заполнябельности различными браузерами - далеко не все и не всегда заполняют это поле... Так что намучаетесь с клиентами... Хотя может сейчас это поле уже стало обязательным?
-
- Пользователь
- Сообщения: 57
- Зарегистрирован: 18 апр 2005, 03:06
Re: .NET Как запретить REST запросы вне веб приложения?
Теоретически, для подобной фильтрации существует HTTP header User-Agent. Проблема в том, что в него (как и в любой другой header) можно записать все, что угодно.
Из вопроса не совсем понятно, что именно нужно, вообще не давать доступ, если клиент не тот, что нужен? Тогда -- HTTPS + client certificate (если нужна 100% гарантия) или же реализовывать handshake между клиентом и сервером самостоятельно: и клиент, и сервер знают некий salt, который используют для генерации токена. Второй вариант более уязвим, так как всегда можно попытаться декомпилировать исходный код клиента и узнать, как именно handshake реализован.
В качестве третьего варианта (если silverlight client запускается с web page) можно посмотреть crossdomainpolicy.xml: http://msdn.microsoft.com/en-us/library ... s.95).aspx
Из вопроса не совсем понятно, что именно нужно, вообще не давать доступ, если клиент не тот, что нужен? Тогда -- HTTPS + client certificate (если нужна 100% гарантия) или же реализовывать handshake между клиентом и сервером самостоятельно: и клиент, и сервер знают некий salt, который используют для генерации токена. Второй вариант более уязвим, так как всегда можно попытаться декомпилировать исходный код клиента и узнать, как именно handshake реализован.
В качестве третьего варианта (если silverlight client запускается с web page) можно посмотреть crossdomainpolicy.xml: http://msdn.microsoft.com/en-us/library ... s.95).aspx
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
Re: .NET Как запретить REST запросы вне веб приложения?
В моём случае необходимо сделать "защиту от дурака", т.е. полагаем, что никто декомпиляцией заниматься не будет.MaskedRhyme писал(а):Теоретически, для подобной фильтрации существует HTTP header User-Agent. Проблема в том, что в него (как и в любой другой header) можно записать все, что угодно.
...всегда можно попытаться декомпилировать исходный код клиента и узнать, как именно handshake реализован.
Пользователь имеет все права, чтобы обратиться к веб сервису. Но нельзя давать ему это делать напрямую через URL в браузере или типа того. Только Silverlight приложение должно получать доступ к веб сервису(используя тем не менее привилегии пользователя).MaskedRhyme писал(а):Из вопроса не совсем понятно, что именно нужно, вообще не давать доступ, если клиент не тот, что нужен?[/url]