CSRF(cross site request forgery)跨站请求伪造
定义
又称 XSRF,攻击者盗用用户身份,发送恶意请求。【冒充用户发起请求(在用户不知情的情况下), 完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)】
原理
用户登录受信任网站 A,网站 A 下发 cookies,在未关闭 A 网站页面情况下,访问 B 网站,网站 B 接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点 A,于是,便带着网站 A 下发 cookies 完成请求注:合法用户(C)、存在漏洞网站(A)、攻击网站(B)
用途 & 危害
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等个人隐私泄露以及财产安全受到威胁、网站信誉受到影响
防御
通过 referer、token 或者 验证码 来检测用户提交。(验证 refer(referer)(禁止来自第三方网站的请求))
尽量不要在页面的链接中暴露用户隐私信息。
对于用户修改删除等操作最好都使用 post 操作。
避免全站通用的 cookie,严格设置 cookie 的域。
xss (cross site scripting) 跨站脚本攻击
定义
攻击者可以利用 web 应用的漏洞或缺陷之处,向页面注入恶意的程序或代码,以达到攻击的目的
原理
攻击者通过各种办法,在用户访问的网页中注入恶意脚本,让其在用户访问网页时在其浏览器中进行执行,从而达到恶意攻击用户的特殊目的
类型
反射性 XSS
通过给用户发送带有恶意脚本代码参数的 URL,当 URL 被打开时,特有的恶意代码被 html 解析,执行。特点是非持久化,必须用户点击特定参数的链接才能引起
存储型 XSS
XSS 代码提交给网站 -> 网站把 XSS 代码存储进数据库 -> 当该页面再次被访问时服务器发送已经被植入 XSS 代码的数据给客户端 -> 客户端执行 XSS 代码
基于 DOM 的 XSS
DOM 中的可被用户操纵的对象,如果 DOM 中的数据没有经过严格确认,就会产生漏洞 XSS
用途 & 危害
身份盗用,钓鱼欺骗、垃圾信息发送
盗取用户信息、隐私
网站钓鱼,盗取各类用户的账号
劫持用户会话,从而执行任意操作,例如进行非法转账,强制发表日志等
强制弹出广告页面,刷流量
流量劫持(通过访问某段具有 window.location.href 定位到其他页面)
dos 攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应。并且通过携带过程的 cookie 信息可以使服务端返回 400 开头的状态码,从而拒绝合理的请求服务。
防御
对数据进行转义,针对富文本设置白名单,使用 CSP
具体做法:
对输入内容的特定字符进行编码,例如表示 html 标记的 < > 等符号。
对重要的 cookie 设置 httpOnly, 防止客户端通过 document.cookie 读取 cookie,此 HTTP 头由服务端设置。
将不可信的值输出 URL 参数之前,进行 URLEncode 操作,而对于从 URL 参数中获取值一定要进行格式检测(比如你需要的时 URL,就判读是否满足 URL 格式)。
不要使用 Eval 来解析并运行不确定的数据或代码,对于 JSON 解析请使用 JSON.parse() 方法。
后端接口也应该要做到关键字符过滤的问题。
XSS、CSRF 两者区别
XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来攻击受信任的网站 XSS 是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的 html 页面时,出现了预期值之外的脚本语句被执行。CSRF 是服务器端没有对用户提交的数据进行随机值校验,且对 http 请求包内的 refer 字段校验不严,导致攻击者可以利用用户的 Cookie 信息伪造用户请求发送至服务器
CORS
是一个 W3C 标准,全称是 ” 跨域资源共享 ”(Cross-origin resource sharing)它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。最常用,主要是后端配置实现此功能非常简单,只需由服务器发送一个响应标头即可。
如:php 文件中 header(‘Access-control-allow-origin:*’)
注:ajax xhr.open(method, url, async) async[true: 异步]