前端面试:黑客的无尽与浏览器的反甲
分类:javascript
1.引言
最近有同学在面试中被问到cookie针对xxs攻击设计了什么,因为'护甲'不厚,然后被'暴击'了。
所以本文针对一些浏览器上基本的攻击方式和防御策略总结了一下,可供参考(百度也行)
2.无尽之刃
(一)xss
-
介绍:XSS 全称是 Cross Site Scripting(
即跨站脚本
);通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页
,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript, -
原理:HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段
JavaScript脚本
时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞 -
特点
- 隐蔽性强 :由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,让人难以察觉
- 发起容易 :(XSS)是最普遍的Web应用安全漏洞
- 病毒跨站,本地执行
-
类型
- 存储型,顾名思义就是将恶意脚本存储了起来
- 文档型:XSS 攻击并不会经过服务端,而是作为中间人的角色,在数据传输过程劫持到网络数据包,然后修改里面的 html 文档!
- 反射型XSS指的是恶意脚本作为网络请求的一部分。
(二)CSRF
- 介绍
:跨站请求伪造
(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任
- 原理: 是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己
曾经认证过的网站
并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿
发出的 - 特点:
- 伪造性 :病毒冒充用户身份,发送恶意请求
- 危害大:如同身份证被盗用
- 攻击方式
- 自动发 GET 请求:这个请求会自动带上关于已登录网站的 cookie 信息假如服务器端没有相应的验证机制,它可能认为发请求的是一个正常的用户,因为携带了相应的 cookie,然后进行相应的各种操作,可以是转账汇款以及其他的恶意操作。
- 自动发 POST 请求:黑客可能自己填了一个表单,写了一段自动提交的脚本,同样也会携带相应的用户 cookie 信息,让服务器误以为是一个正常的用户在操作,让各种恶意的操作变为可能。
- 诱导点击发送 GET 请求:点击后,自动发送 get 请求,然后进行操作
(三)sql注入
- 介绍 SQL注入即是指web应用程序对用户输入数
据的合法性
没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句
,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息 - 特点
- 广泛性:任何一个基于SQL语言的数据库都可能被攻击,
- 隐蔽性: SQL注入语句一般都嵌入在普通的HTTP请求中,很难与正常语句区分开
- 危害大: 攻击者通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁
- 操作方便: 互联网上有很多SQL注入工具,简单易学,攻击过程简单,不需要专业知识也能自如运用
- 原理:第一步:SQL注入点探测 判断什么地方存在SQL注入点;第二步:收集后台数据库信息;第三步:猜解用户名和密码;第四步:查找Web后台管理入口;第五步:入侵和破坏
荆棘之甲
(一)防御xss
- 千万不要相信任何用户的输入!无论是在前端和服务端,都要对用户的输入进行
转码或者过滤
。这样代码在 html 解析的过程中是无法执行的
<script>alert('abcd')</script>//转前
<script>alert('abcd')</script>//转后
-
CSP 即浏览器中的内容安全策略,使服务器决定浏览器加载哪些资源,可以限制其他域下的资源加载;禁止向其它域提交数据;提供上报机制,能帮助我们及时发现 XSS 攻击
-
cookie属性设置:
HttpOnly
属性设置为true; 很多 XSS 攻击脚本都是用来窃取Cookie, 而设置 Cookie 的 HttpOnly 属性后,JavaScript 便无法读取 Cookie 的值。这样也能很好的防范 XSS 攻击
(二) 防御CSRF
- cookie 属性设置:CRFS用携带的cookie冒充身份,
SameSites
属性可以控制cookie被请求携带的场合。其中有三个值Strict
、Lax
和None
.设置为 Strict,禁止第三方请求携带。 - 请求头字段设置:用Origin设置请求域名,用Referer设置请求URL路径
- Token 安全令牌:
Token
是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。通常第三方站点无法拿到这个 token, 因此也就是被服务器给拒绝。
(三)防御SQL注入(偏前端方法)
- 通过
正则表达校验
用户输入 首先我们可以通过正则表达式校验用户输入数据中是包含:对单引号和双"-"进行转换等字符。然后继续校验输入数据中是否包含SQL语句的保留字,如:WHERE,EXEC,DROP - 通过参数化存储过程进行数据查询存取: 参数数化存储过程帮我们校验出传递给数据库的变量的类型,控制用户权限
- 其他:blog.csdn.net/wodetian122…
小结
- 全是废话,只要记住名字,攻击原理,根据伤害类型,决定出“父亲背心”还是“母亲斗篷”
- 与安全有关的cookies属性熟记