跨域、安全

76 阅读2分钟

跨域

同源策略

协议相同,域名相同,端口相同

不允许跨域报错

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'xxxxxx' is therefore not allowed access

跨域出现的场景

  • 前后端分离的项目联调时,客户端和服务端ip不一致
  • 项目中可能需要多个服务,不同服务部署在不同的端口上,甚至多个服务器上

跨域解决的方法

JSONP:

原理:由于 script 标签不受浏览器同源策略的影响,允许跨域引用资源。因此可以通过动态创建 script 标签,然后利用 src 属性进行跨域。

CORS(跨域资源共享)

Proxy(服务器代理)

通过nginx配置一个代理服务器做跳板机,反向代理

解决前端跨域携带cookie

  • 第一步:前端发送请求request对象添加withCredentials:true
  • 第二步:服务端在response的header中配置Access-Control-Allow-Origin", "[http://xxx]"
  • 第三步:服务端在response的header中配置Access-Control-Allow-Credentrials", "true"

withCredentials

XMLHttpRequest.withCredentials 属性是一个[Boolean]类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。

安全

XSS(跨站脚本攻击)【代码注入攻击】

背景

攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行,利用恶意脚本,攻击者可获取用户的敏感信息(cookie,SessionID),进而危害数据安全。

防御方法

  • 转义字符:对用户输入输出的内容进行转义
  • 白名单过滤:富文本内容
  • CSP(内容安全策略):设置http中的header中的content-Security-Policy:policy

CSRF(跨站请求伪造)

背景

攻击者诱导受害者进入第三方网站,在第三方网站中向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

原理

攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。如果用户是在登录状态下,后端就以为是用户在操作,从而进行相应的逻辑操作。

防御方法

  • token验证
  • 验证码

cookie引发csrf攻击