2016-02-27 2 views
1

У меня есть webapp, что делает JavaScript-вызов веб-сервисом. Я не хочу, чтобы доступ к любым программам, таким как SOAP ui/curl, отправлял запрос на мой веб-сервис. В заголовке ответа я сделать фильтрацию только моей веб-странице:Как разрешить только веб-приложение получать доступ к веб-сервису?

Access-Control-Allow-Origin:http://myurl.com 

Когда я делаю запрос от моей локальной машине сервер не позволяет сделать так:

XMLHttpRequest: не может загрузить http://myurl.com/service/rest/user/add. Заголовок Access-Control-Allow-Origin имеет значение http://myurl.com, которое не равно входящему в комплект поставки. Происхождение http: // localhost: 9000 поэтому не разрешен доступ.

Что хорошо, я очень доволен, но, видимо, я могу использовать Soap ui/curl, чтобы сделать вышеупомянутый вызов, и сервис позволяет это. Заголовки для этого звонка:

=== MimeHeaders === 
accept-encoding = gzip,deflate 
content-type = application/json 
content-length = 39 
host = localhost:8080 
connection = Keep-Alive 
user-agent = Apache-HttpClient/4.1.1 (java 1.5) 

Как разрешить только начало моего веб-приложения совершать звонки в службу?

+0

На самом деле нет надежного способа обеспечить такое ограничение. Зачем вам это нужно? – Pointy

+0

CORS применяется только при поддержке (поддерживающей) клиентской стороны при контакте с ресурсом в удаленном домене. Следовательно, когда удаленный сервер или любое другое удаленное программное обеспечение отправляет HTTP-запрос на ваш сервер, CORS не применим. Ограничение доступа к сервису зависит от других факторов, связанных с настройкой и типом сервера. Пожалуйста, поделитесь ими. – Boaz

+0

В браузерах используются Access-Control-Allow-Origin и аналогичные заголовки, и поскольку curl не запускается в браузере, эти заголовки игнорируются. Вы можете попробовать проверить Referrer или строку агента, использовать сгенерированные токены и т. Д., Но вы не сможете на 100% блокировать все, что не является вашим приложением. –

ответ

0

CORS работают только для песочницы браузеров. Если вы хотите запретить доступ, добавьте некоторый auth, например, basic auth или используйте некоторые пользовательские заголовки для звонков в белый список.

0

Что вы определили здесь, это только защита на стороне клиента, чтобы остерегаться, чтобы ваши клиенты браузера выполняли вредоносные запросы на вашем сервере, если браузер не запускается в небезопасном режиме.

Если вам нужна безопасность для вашего бэкэнд, рассмотрите возможность ограничения доступа к сети с помощью какого-либо брандмауэра или защиты вашего бэкэнд с помощью механизма аутентификации, такого как Basic Auth.

0

Быстрый ответ: вы не можете быть уверены, что на 100% что Javascript на вашей веб-странице сделает запрос. По определению, это ваши пользователи, которые делают запросы.

Другой ответ: вы можете использовать несколько вещей, чтобы защитить себя.

  1. Создание печенья с ограниченным сроком службы.
  2. Сделайте дроссель, чтобы вы могли ограничить количество запросов единиц измерения времени.
  3. ....

Есть еще много других решений, просто искать его в Интернете, вы найдете много.

Смежные вопросы