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: 指明了实际请求中允许携带的首部字段。