cors - msforest/notebook GitHub Wiki
CORS,也叫跨域资源共享,是浏览器的一种安全策略(curl/wget 没有),表示当一个资源从当前资源域名访问另外一个资源域名时,浏览器会发起跨域请求;仅针对脚本限制,而 img 标签是不受限制的
预习概念
- 防止点击劫持攻击
- x-frame-options: deny/sameorigin
- DoS 攻击
- 限制特定 ip 访问
- 中间人攻击(MITM)
- 为使用 https
- sql 注入/os 注入
- 使用参数化查询
- 单引号转换
- 跨站脚本攻击 xss
- 设置 cookie 的 httponly 可以防止该攻击
- 对输入内容进行校验、转义
- 垮站请求伪造 csrf
- 检查 Referer 首部字段
- 添加 Token 验证
- 输入验证码
- 预检请求
- 简单请求
为验证服务器是否支持跨域请求发起或是否要携带认证信息,通常情况下浏览器会发起预检请求进行验证;当然也包含一些简单的方法不需要验证,可以直接请求服务器操作,这类请求称为简单请求
简单请求
满足简单请求的方法或条件:
- GET/POST/HEAD
- Accept, Accept Language, Content-Language, Content-Type(application/x-www-form-urlencoded or multipart/form-data or text/plain)
预检请求
除了简单请求的,就是预检请求;预检请求会发起一个 OPTIONS 方法的预请求,这个时候浏览器会带上 origin 请求头信息。
跨域请求头字段:
- Origin: 表明预检请求或实际请求的源站。
- Access-Control-Request-Method: 将实际请求所使用的 HTTP 方法告诉服务器。
- Access-Control-Request-Headers: 将实际请求所携带的首部字段告诉服务器。
跨域响应头字段:
- Access-Control-Allow-Origin: 允许来自所有域的请求.
- Access-Control-Expose-Headers: 让服务器把允许浏览器访问的头放入白名单
- Access-Control-Max-Age: 指定了 preflight 请求的结果能够被缓存多久
- Access-Control-Allow-Credentials: 指定了实际的请求是否可以使用 credentials.
- Access-Control-Allow-Methods: 指明了实际请求所允许使用的 HTTP 方法。
- Access-Control-Allow-Headers: 指明了实际请求中允许携带的首部字段。