只是基础的谈下WEB的安全漏洞,主要是从服务端的配置相关;
1. X-FRAME-OPTIONS
该值是用于是否同意浏览器用<frame>、<iframe>、<object>将该网页嵌入
-
主要有以下几个值
- DENY
不允许使用frame嵌套 - SAMEORIGIN
可以嵌在相同域名的frame中 - ALLOW-FROM uri
可以嵌在指定uri的frame
- DENY
危害
点击劫持
例如用户通过frame嵌套网站A,并将透明度置成0,然后写一个同样的网页覆盖在frame上面,当用户在假的网站上输入用户名、密码等,那么这些信息就会被该网站给劫持了。通过代码控制,实际又能将用户名、密码下发到网站A,且只要转换两个页面的透明度,实际显示的页面又是网站A,这样用户就发现不了,但用户名、密码都被假网站给取走了。所以在实际的环境中,尽量将X-FRAME-OPTIONS置为DENY,除非不涉及相关安全问题。
2. X-XSS-Protection
-
首先需要了解下什么是XSS
英文全称: Cross-site scripting,中文全称:跨站脚本攻击
他指的是利用漏洞在网站上注入恶意的客户端代码,主要分为以下三种:- 存储型XSS
将XSS代码直接存储到数据库、文件之类的,当用户访问到这些数据时,就会发生XSS攻击 - 反射型XSS
将恶意代码直接通过表单等方式,下发到服务端,这样子当下次获取的时候,不需要操作,就可以直接对网页进行攻击
主要可以通过下列了解下:
https://www.owasp.org/index.php/Testing_for_Reflected_Cross_site_scripting_(OTG-INPVAL-001) - 基于DOM
如文字,就是直接对DOM进行操作,改变DOM结构,该类型XSS攻击,只对客户端产生影响,不操作服务端
- 存储型XSS
X-XSS-Protection用来防御反射型XSS攻击
该属性firefox不支持;
网上也有关于X-XSS-Protection的副作用案例,具体未做了解;
建议使用其他方式防止XSS攻击
例如前后端都可以对用户数据进行一层处理,例如对<、>这样可能会是html标签的文字,进行一层转义之类的,具体待深究;-
延伸Content-Security-Policy
MDN上介绍X-XSS-Protect时,有说到CSP。
告诉客户端,哪些资源可以加载和执行,哪些资源部能加载,防止攻击者发现漏洞。
可以添加到HTTP头部,也可以添加到meta处参考文档
Content Security Policy 入门教程
内容安全策略( CSP )
https://cloud.tencent.com/developer/chapter/13541-
资源加载限制
-
示例
下例说明,允许加载来自同一资源下内容,还有来自于trusted.com这个域名
而font-src的加载资源格式会覆盖default-src的加载格式,允许加载所有资源(试一下!!!!)Content-Security-Policy: default-src 'self' *.trusted.com; font-src *
-
URL限制
-
其他限制
-
report-uri
-
report-uri:告诉浏览器,应该把注入行为报告给哪个网址(试一下!!!!)
Content-Security-Policy-Report-Only
该字段表示不执行限制选项,只是记录违反限制,需要配合report-uri
使用
-
report-uri:告诉浏览器,应该把注入行为报告给哪个网址(试一下!!!!)
-
选项值
- 主机名:example.org,https://example.com:443
- 路径名:example.org/resources/js/
- 通配符:*.example.org,*://*.example.com:*(表示任意协议、任意子域名、任意端口)
- 协议名:https:、data:
- 关键字'self':当前域名,需要加引号
- 关键字'none':禁止加载任何外部资源,需要加引号
-
script-src 特殊值
- 'unsafe-inline':允许使用内联资源,如内联<script>元素,javascript:URL,内联事件处理程序和内联<style>元素。你必须包括单引号
- 'unsafe-eval':允许将字符串当作代码执行,比如使用eval、setTimeout、setInterval和Function等函数。你必须包括单引号
- nonce值:每次HTTP回应给出一个授权token,页面内嵌脚本必须有这个token,才会执行
- hash值:列出允许执行的脚本代码的Hash值,页面内嵌脚本的哈希值只有吻合的情况下,才能执行。
3. X-Content-Options:nosniff
推荐: