定义
- CSP(Content - Security - Policy)即内容安全策略,是一种计算机安全标准,用于防止跨站点脚本攻击(XSS)、点击劫持和其他代码注入攻击等。它通过指定可信的内容来源,让浏览器只加载和执行来自这些指定来源的内容,如脚本、样式表、图像、字体等。
工作原理
- 策略配置:网站管理员可以通过在HTTP头信息(如
Content - Security - Policy
)或者HTML的<meta>
标签中设置CSP策略。例如,在HTTP头中可以这样设置:Content - Security - Policy: default - src 'self'; script - src 'self' https://trusted - scripts.com;
- 这表示默认情况下(
default - src
),只允许从当前网站自身(self
)加载资源,对于脚本(script - src
),除了自身网站外,还允许从https://trusted - scripts.com
加载。 - 指令和源列表:CSP包含多种指令,如
default - src
(默认资源加载源)、script - src
(脚本加载源)、style - src
(样式表加载源)、img - src
(图像加载源)等。每个指令后面跟着一个源列表,源可以是以下几种类型:- 具体的域名或IP地址:如
https://example.com
,表示只允许从该域名加载相关资源。 - 关键字:
self
表示当前网站的源,包括相同的协议、域名和端口。unsafe - inline
允许内联脚本或样式(通常不推荐,因为这可能会增加安全风险),unsafe - eval
允许使用eval()
函数(同样有安全风险)。 - 通配符:
*
可以作为通配符,表示允许从任何源加载,但这会大大降低安全性,一般不单独使用,而是与其他限制条件结合。
- 具体的域名或IP地址:如
- 浏览器执行:当浏览器加载网页时,它会根据CSP策略来检查每个资源的加载请求。如果请求的资源来源不符合CSP策略中相应指令的规定,浏览器就会阻止该资源的加载,并且可能会在控制台显示相关的安全错误信息。例如,如果CSP策略规定
script - src 'self'
,而网页尝试加载一个来自其他未授权域名的脚本,浏览器将不会加载这个脚本。
- 策略配置:网站管理员可以通过在HTTP头信息(如
应用场景和优势
- 防范跨站点脚本攻击(XSS):这是CSP最主要的用途。XSS攻击通常是攻击者通过在目标网站中注入恶意脚本,然后诱使用户访问包含恶意脚本的页面来窃取用户信息等。CSP通过限制脚本的来源,使得攻击者很难将恶意脚本注入到页面中。例如,不允许
unsafe - inline
和unsafe - eval
可以有效防止攻击者直接在HTML中插入恶意内联脚本或者通过eval()
函数执行恶意代码。 - 防止数据泄露:通过严格控制资源加载来源,可以防止敏感数据被泄露。例如,确保图像、字体等资源只能从可信的源加载,避免恶意网站通过加载伪造的资源来窃取数据。
- 增强网站整体安全性:对于大型网站或者需要处理敏感信息的网站(如金融网站、电商网站等),CSP提供了一种标准化的安全机制,可以在一定程度上降低安全风险,并且可以与其他安全措施(如防火墙、加密等)相结合,提高网站的整体安全性。
- 防范跨站点脚本攻击(XSS):这是CSP最主要的用途。XSS攻击通常是攻击者通过在目标网站中注入恶意脚本,然后诱使用户访问包含恶意脚本的页面来窃取用户信息等。CSP通过限制脚本的来源,使得攻击者很难将恶意脚本注入到页面中。例如,不允许