Spring Security配置内容安全策略

网友投稿 1277 2022-05-30

Spring Security配置内容安全策略

1、什么是内容安全策略?

内容安全策略:Content Security Policy,简称CSP,内容安全策略是一种安全机制,开发着可以通过HTTP 响应标头,可显著减少现代浏览器中的 XSS、Clickjacking 等代码注入攻击。CSP通过W3C WebApplication Security Working Group发布标准

标准语法:

Content-Security-Policy: ; ; ; ...

例子:

Content-Security-Policy:script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data:;connect-src 'self' http://www.baidu.com http://127.0.0.1:8080 data:;font-src 'self';object-src 'self';

2、CSP有哪些选项?

CSP1.0主要提供了这些选项的配置:

default-src:为其余指令设置默认源列表。如果其它指令没设置,就用default-src的默认配置

script-src:为JavaScript一些脚本配置安全策略

object-src:这里一般指Flash或者一些Java插件等等

style-src:css样式

img-src:图片

media-src:媒体文件(音频和视频)

frame-src:嵌入的外部资源(比如、等等)

font-src:字体文件

connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)

CSP2.0:新增的一些主要选项

base-uri:控制是否允许文档操作页面的基本 URI。

child-src:替换frame-src.

form-action:控制文档提交 HTML 表单的能力。

frame-ancestors:像 X-Frame-Options 标题一样工作,通过控制如何将此文档嵌入到其他文档中。

plugin-types:控制页面可以加载哪些特定插件,例如 Flash、Java、Silverlight 等。

所有指令都遵循相同的模式:

self用于引用当前域

可以在空格分隔的列表中指定一个或多个 URL,一般是一些域名或者ip加端口

none表示不应为给定指令加载任何内容,例如object-src 'none’表示不应加载任何插件(如 Flash 或 Java)。

例子:

Content-Security-Policy:script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’;style-src ‘self’ ‘unsafe-inline’;img-src ‘self’ data:;connect-src ‘self’ http://www.baidu.com http://127.0.0.1:8080 data:;font-src ‘self’;object-src ‘self’;

3、设置CSP方法

前端页面设置,前端页面通过设置meta 标签

后端设置,设置response的header

public void setResponseHeader(HttpServletRequest request,HttpServletResponse response) { //内容安全策略 response.setHeader("Content-Security-Policy", "script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data:;connect-src 'self' http://www.baidu.com http://127.0.0.1:8080 data:;font-src 'self';object-src 'self';"); }

4、Spring Security设置CSP

有了前面的基础知识后,我们可以新建一个Spring Security项目来实践:

开发环境

JDK 1.8

SpringBoot2.2.1

Maven 3.2+

开发工具

IntelliJ IDEA

smartGit

Navicat15

在IDEA里集成阿里的https://start.aliyun.com,创建一个Spring Initializr项目:

选择jdk版本,和maven打包方式

项目主要的maven配置:

org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf

spring-boot-starter-security:springboot集成的spring security starter

spring-boot-starter-web:web相关的starter

spring-boot-starter-thymeleaf:使用thymeleaf在前面页面渲染

加一个简单的登录页面:

Signin Template for Bootstrap

上一篇:一文回顾 Java 入门知识(下)
下一篇:React Native 项目 Web 端同构初探
相关文章