Сбой с CSP внутри Intel XDK

Итак, у меня есть этот веб-API с разными конечными точками для вызова разных значений json, например:

https://example.com/api/values

https://example.com/api/othervalues

Я только добавляю uri https://example.com/api/ в сетевой запрос в белый список Cordova, и это работает хорошо и может звонить с обеих конечных точек.

Однако

При попытке сделать то же самое с CSP (http://www.html5rocks.com/en/tutorials/security/content-security-policy/#reporting) (https://software.intel.com/en-us/articles/cordova-whitelisting-with-intel-xdk-for-ajax-and-launching-external-apps) просто не будет работать при сборке или предварительном просмотре приложения (iOS), но работает внутри эмулятора.

Это код, который я использую, который не работает, но работает в эмуляторе на компьютере.

<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://example.com/api/valuest/; img-src 'self' https://example.com/api/othervalues; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">

И этот работает везде, он же сборка, эмулятор, предварительный просмотр приложения.

<meta http-equiv="Content-Security-Policy" content="default-src 'self' * https://example.com/api/valuest/; img-src 'self' https://example.com/api/othervalues; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">

Ищите * внутри src по умолчанию, это единственная разница, поэтому, очевидно, есть что-то, что не разрешено запускать в первом теге <meta>, но я не могу понять, что именно. Я буквально пробовал все остальные директивы ресурсов, и единственная работающая — это добавление * внутри src по умолчанию.

Сейчас

Теперь я рассматриваю возможность использования белого списка Cordova и пропуска политики безопасности контента. Я не очень разбираюсь в безопасности, но... может этого недостаточно? Приложение сможет работать только на мобильных устройствах (а не на компьютере), что, как я полагаю, должно затруднить атаку? Насколько я понимаю, чтение по этой ссылке (http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful ), использование CSP намного лучше, только если я запрещаю встроенные сценарии, в противном случае он служит той же цели, что и белый список кордовы?

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


person Mattias    schedule 05.04.2016    source источник
comment
Проблема заключалась в том, что я не добавил пробел: который необходим для iOS.   -  person Mattias    schedule 06.04.2016


Ответы (1)


Я попытался отредактировать ваши примеры кода, чтобы сделать их более читабельными.

Я предполагаю, что вам нужно указать URL-адрес вашего веб-сервиса следующим образом:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://example.com/; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">

Вам не нужно указывать точный URL-адрес вашего сервиса, но URL-адрес источника, которому вы доверяете. Также обратите внимание, что если вы установите https://example.com/ как default-src, нет необходимости устанавливать его как img-src, так как default-src переопределит любую другую директиву, которая не установлена ​​специально...

"Дальнейшее чтение":

Для меня даже было возможно установить URL-адрес используемых веб-сервисов как connect-src, что является более ограничительным (и, следовательно, обеспечивает лучшую защиту). Конечно, это зависит от того, как вы взаимодействуете с сервером. Упомянутая вами статья на html5rocks является довольно хорошим источником для выяснения того, что вы можете использовать... В любом случае возможный метатег с использованием connect-src может выглядеть примерно так:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self' https://example.com/; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/;  script-src 'self' 'unsafe-inline'">
person Phonolog    schedule 06.04.2016