跨域
同源策略
协议相同,域名相同,端口相同
不允许跨域报错
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验证
- 验证码