跨域
浏览器遵循同源政策(scheme(协议)、host(主机)和port(端口)都相同则为同源)。非同源站点有这样一些限制:
- 不能读取和修改对方的 DOM
- 不读访问对方的 Cookie、IndexDB 和 LocalStorage
- 限制 XMLHttpRequest 请求。(后面的话题着重围绕这个)
CORS
CORS 其实是 W3C 的一个标准,全称是跨域资源共享。服务器需要附加特定的响应头
- Access-Control-Allow-Origin
- Access-Control-Allow-Credentials是否允许发送 Cookie.前端也需要设置withCredentials属性
- Access-Control-Expose-Headers
JSONP
虽然XMLHttpRequest对象遵循同源政策,但是script标签不一样,它可以通过 src 填上目标地址从而发出 GET 请求,实现跨域请求并拿到响应
Nginx
Nginx 是一种高性能的反向代理服务器,可以用来轻松解决跨域问题。
安全
XSS
XSS 全称是 Cross Site Scripting(即跨站脚本),为了和 CSS 区分,故叫它XSS。XSS 攻击是指浏览器中执行恶意脚本(无论是跨域还是同域),从而拿到用户的信息并进行操作。
这些操作一般可以完成下面这些事情:
- 窃取Cookie。
- 监听用户行为,比如输入账号密码后直接发送到黑客服务器。
- 修改 DOM 伪造登录表单。
- 在页面中生成浮窗广告。
通常情况,XSS 攻击的实现有三种方式——存储型、反射型和文档型。
如何阻止
- 服务器对输入脚本进行过滤或转码(< script >)
- 充分利用 CSP(CSP,即浏览器中的内容安全策略,它的核心思想就是服务器决定浏览器加载哪些资源,具体来说可以完成以下功能:
1:限制其他域下的资源加载。
2:禁止向其它域提交数据。
3:提供上报机制,能帮助我们及时发现 XSS 攻击。) - 使用 HttpOnly 属性(set-cookie: NID=xxxxxxx; HttpOnly)
CRFS
“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。
CSRF攻击一般会有三种方式:
- 自动 GET 请求
- 自动 POST 请求
- 诱导点击发送 GET 请求。
防范措施: 利用 Cookie 的 SameSite 属性、验证来源站点和CSRF Token。