- < src=https://www.isolves.com/it/aq/fwq/2019-10-08/"...">> 标签嵌入跨域脚本 。语法错误信息只能在同源脚本中捕捉到 。
- <link rel="stylesheet" href=https://www.isolves.com/it/aq/fwq/2019-10-08/"..."> 标签嵌入CSS 。由于CSS的松散的语法规则,CSS的跨域需要一个设置正确的Content-Type 消息头 。
- <img> / <video> / <audio> 嵌入多媒体资源 。
- <object> <embed> 和 <Applet> 的插件 。
- @font-face 引入的字体 。一些浏览器允许跨域字体( cross-origin fonts),一些需要同源字体(same-origin fonts) 。
- <frame> 和 <iframe> 载入的任何资源 。站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互 。
JSONP就是利用 <> 标签的跨域能力实现跨域数据的访问,请求动态生成的Java脚本同时带一个callback函数名作为参数 。
服务端收到请求后,动态生成脚本产生数据,并在代码中以产生的数据为参数调用callback函数 。
3.2.2.3.2. 跨源脚本API访问
Java的APIs中,如 iframe.contentWindow , window.parent, window.open 和 window.opener 允许文档间相互引用 。当两个文档的源不同时,这些引用方式将对 window 和 location 对象的访问添加限制 。
window 允许跨源访问的方法有
- window.blur
- window.close
- window.focus
- window.postMessage
- window.closed
- window.frames
- window.length
- window.location
- window.opener
- window.parent
- window.self
- window.top
- window.window
3.2.2.3.3. 跨源数据存储访问
存储在浏览器中的数据,如 localStorage 和 IndexedDB,以源进行分割 。每个源都拥有自己单独的存储空间,一个源中的Java脚本不能对属于其它源的数据进行读写操作 。
3.2.2.4. CORS
CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing) 。通过这个标准,可以允许浏览器读取跨域的资源 。
3.2.2.4.1. 常见返回头
- Access-Control-Allow-Origin
- 声明允许的源
- Access-Control-Allow-Origin: <origin> | *
- Access-Control-Expose-Headers
- 声明允许暴露的头 e.g. Access-Control-Expose-Headers: X-My-Custom-Header,X-Another-Custom-Header
- Access-Control-Max-Age
- 声明Cache时间
- Access-Control-Max-Age: <delta-seconds>
- Access-Control-Allow-Credentials
- 声明是否允许在请求中带入
- Access-Control-Allow-Credentials: true
- Access-Control-Allow-Methods
- 声明允许的访问方式
- Access-Control-Allow-Methods: <method>[, <method>]*
- Access-Control-Allow-Headers
- 声明允许的头
- Access-Control-Allow-Headers: <field-name>[, <field-name>]*
- Origin
- 指定请求的源
- Origin: <origin>
- Access-Control-Request-Method
- 声明请求使用的方法
- Access-Control-Request-Method: <method>
- Access-Control-Request-Headers
- 声明请求使用的header
- Access-Control-Request-Headers: <field-name>[, <field-name>]*

文章插图
如非必要不开启CORS
- 定义详细的白名单,不使用通配符,仅配置所需要的头
- 配置 Vary: Origin 头部
- 如非必要不使用 Access-Control-Allow-Credentials
- 限制缓存的时间
阻止跨域写操作,可以检测请求中的 CSRF token,这个标记被称为Cross-Site Request Forgery (CSRF) 标记 。
阻止资源的跨站读取,因为嵌入资源通常会暴露信息,需要保证资源是不可嵌入的 。但是多数情况下浏览器都不会遵守 Content-Type 消息头 。例如如果在HTML文档中指定 <> 标记,则浏览器会尝试将HTML解析为Java 。
3.2.3. CSP
3.2.3.1. CSP是什么?
Content Security Policy,简称 CSP 。顾名思义,这个规范与内容安全有关,主要是用来定义页面可以加载哪些资源,减少 XSS 的发生 。
3.2.3.2. 配置
CSP策略可以通过 HTTP 头信息或者 meta 元素定义 。
推荐阅读
- 如何测试电源的故障 测试电源好坏
- 瘦肉精快速检测试剂盒 瘦肉精检测卡
- 抑郁症在线测试
- 特斯拉|特斯拉Model Y中保碰撞测试:保费高的原因找到了!
- PHP防止跨站和xss攻击代码
- 小程序自动化测试实践
- 最全的网站渗透测试详细检测方法
- 4种出色的Python测试框架
- Java 程序员需要用到 10 个测试框架和库
- 苹果|iOS 16要来了!苹果突发iOS 15.5首个版本测试 坐等升级
