Безопасность CORS с мобильными приложениями

Нам нужно поддерживать безопасность сервера API с ограничением CORS:

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

Но нам также нужен этот API для доступа к нашим мобильным приложениям (Android + iOs).

Все найденные решения говорят мне разрешить все происхождение: *, но это будет большой сбой безопасности для нашего API.

Мы создаем наши приложения с помощью Cordova, которые WebView обслуживает локальные файлы и поэтому отправляет: origin: null для всех своих запросов http (s). Поэтому мы думаем о добавлении null в разрешенное происхождение. Это лучше, так как это заблокирует каждый другой веб-сайт, пытающийся извлечь наш API, но он позволит любым мобильным приложениям получать его...

Есть ли еще интересное решение для этого?

Спасибо!

Ответ 1

Итак, мы думаем о добавлении нулевого значения в разрешенное происхождение. Это лучше, так как это заблокирует каждый другой веб-сайт, пытающийся извлечь наш API, но он позволит любым мобильным приложениям получать его...

Хорошо, если вы это сделаете, тогда вы разрешаете запросы из кода JavaScript, которые запускаются из любого источника, отличного от http/https, который включает любого, кто работает с URL-адресом file:// или даже data:.

Итак, если вы используете ограничительную политику CORS для "соображений безопасности", то отправка ответов с заголовком Access-Control-Allow-Origin: null звучит как довольно плохая идея.


Нам нужно поддерживать безопасность сервера API с ограничением CORS: Все найденные решения говорят мне разрешить все происхождение: *, но это будет большой сбой безопасности для нашего API.

Вы не объясните, почему вы определили, что это будет сбой безопасности или почему вам нужно иметь ограничительную политику CORS. Но если (1) ваш веб-сервер не работает в интрасети или за каким-то другим видом брандмауэра, и (2) доступ к ресурсам в противном случае ограничивается только IP-аутентификацией, то вы ничего не получите от использования ограничительной политики CORS. В укажите спецификацию:

Базовая безопасная настройка протокола CORS

Для ресурсов, где данные защищены с помощью IP-аутентификации или брандмауэра (к сожалению, все еще довольно часто), использование протокола CORS небезопасно. (Вот почему должен был быть разработан протокол CORS.)

Однако в противном случае использование следующего заголовка безопасно:

Access-Control-Allow-Origin: *

Даже если ресурс предоставляет дополнительную информацию на основе cookie или HTTP-аутентификации, использование этого заголовка не покажет его. Он будет совместно использовать ресурс с API-интерфейсами, такими как XMLHttpRequest, так же, как он уже делится с curl и wget.

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

Ответ 2

Как указано в ответе sideshowbarker, использование Access-Control-Allow-Origin: null нельзя считать безопасным, если приложение можно открыть в контексте браузера. Однако это не представляет угрозы безопасности для приложения, работающего в своем собственном веб-представлении.

Такая же политика происхождения (которая распространяется на CORS) разработана для определенного вида угроз: сценарий из чужого домена, запущенный в браузере, отправляющий запрос на ваш сервер, который включает в себя ваши куки авторизации. Но если вы запускаете свое приложение в выделенном WKWebView тогда не будет никаких внешних скриптов, которые могли бы сделать запрос на ваш сервер, используя ваши куки.