我的文檔變成了亂碼?(文檔突然變成亂碼)
1501
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配置:
spring-boot-starter-security:springboot集成的spring security starter
spring-boot-starter-web:web相關的starter
spring-boot-starter-thymeleaf:使用thymeleaf在前面頁面渲染
加一個簡單的登錄頁面: