我有一个将图像上传到服务器的客户端,然后,服务器获取该图像并将其上传到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
答案 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
}