CSP阻止来自S3的图像

时间:2020-01-22 14:09:17

标签: angular amazon-web-services amazon-s3

我有一个将图像上传到服务器的客户端,然后,服务器获取该图像并将其上传到S3,等待URL,然后返回该图像的URL。

问题是由于某种原因,客户端拒绝加载服务器提供的图像

在控制台中,这是我收到的消息(出于隐私原因,删除了实际URL): 拒绝加载图像“ URL ”,因为它违反了以下内容安全策略指令:“ img-src'自身'数据:”。

已上传具有所有读取权限的图像,因此任何人都可以读取url。

HTML中的CSP如下:

<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传递给客户端。例如:

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

2 个答案:

答案 0 :(得分:0)

指令中还有其他条目时,看起来通配符会被忽略

所以试试这个:

<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' *">

答案 1 :(得分:-1)

此问题已解决。

这个有角度的应用程序正在运行的服务器上运行,该服务器还运行带有Spring Security的Java Springboot。

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
}