CSP блокирует образы от S3 - PullRequest
0 голосов
/ 22 января 2020

У меня есть клиент, который загружает изображение на сервер, затем сервер берет это изображение и загружает его на S3, ждет URL-адрес и затем возвращает URL-адрес для этого изображения.

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

В консоли это сообщение, которое я получаю (фактический URL удален из соображений конфиденциальности): отказался загружать изображение ' URL ', поскольку он нарушает следующую директиву политики безопасности содержимого: "img-sr c' self 'data:".

Изображение загружено со всеми разрешениями на чтение, так что любой может прочитать URL.

CSP в HTML выглядит следующим образом:

<meta http-equiv="Content-Security-Policy" content="default-src *; img-src * 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline' *">

Я должен сказать, что я передаю клиенту URL, который был создан Amazon. Например:

https://mybucket.s3.us-west-2.amazonaws.com/ecc6898f-56b1-4ad1-bb73-3b5c9749d264.jpeg

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Это было исправлено.

Это приложение angular работало на сервере, на котором также выполнялась Java Springboot с Spring Security.

Spring security имеет функцию конфигурации, которая переопределяет HTTP-поведение сервера (URI удалены из примера по соображениям безопасности ::

@Override
public void configure(HttpSecurity http) throws Exception {
    // @formatter:off
    http
        .csrf()
        .disable()
        .addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
        .exceptionHandling()
        .authenticationEntryPoint(problemSupport)
        .accessDeniedHandler(problemSupport)
    .and()
        .headers()
        .contentSecurityPolicy("default-src 'self'; frame-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://storage.googleapis.com; style-src 'self' 'unsafe-inline'; img-src * 'self' data:; font-src 'self' data:")
    .and()
        .referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
    .and()
        .featurePolicy("geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; speaker 'none'; fullscreen 'self'; payment 'none'")
    .and()
        .frameOptions()
        .deny()
    .and()
        .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    .and()
        .authorizeRequests()
        .antMatchers("/api/endpoint").permitAll()
        .apply(securityConfigurerAdapter());
    // @formatter:on
}
0 голосов
/ 22 января 2020

Похоже, что подстановочный знак игнорируется, когда есть другие записи в директиве

Так что попробуйте это:

<meta http-equiv="Content-Security-Policy" content="default-src *; img-src https 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src  'self' 'unsafe-inline' *">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...