前端面试:黑客的无尽与浏览器的反甲

吐槽君 分类:javascript

1.引言

最近有同学在面试中被问到cookie针对xxs攻击设计了什么,因为'护甲'不厚,然后被'暴击'了。
所以本文针对一些浏览器上基本的攻击方式和防御策略总结了一下,可供参考(百度也行)

2.无尽之刃

(一)xss

  1. 介绍:XSS 全称是 Cross Site Scripting(即跨站脚本);通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,

  2. 原理:HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞

  3. 特点

    • 隐蔽性强 :由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,让人难以察觉
    • 发起容易 :(XSS)是最普遍的Web应用安全漏洞
    • 病毒跨站,本地执行
  4. 类型

    • 存储型,顾名思义就是将恶意脚本存储了起来
    • 文档型:XSS 攻击并不会经过服务端,而是作为中间人的角色,在数据传输过程劫持到网络数据包,然后修改里面的 html 文档!
    • 反射型XSS指的是恶意脚本作为网络请求的一部分。

(二)CSRF

  1. 介绍:跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任
  2. 原理: 是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的
  3. 特点:
    • 伪造性 :病毒冒充用户身份,发送恶意请求
    • 危害大:如同身份证被盗用
  4. 攻击方式
  • 自动发 GET 请求:这个请求会自动带上关于已登录网站的 cookie 信息假如服务器端没有相应的验证机制,它可能认为发请求的是一个正常的用户,因为携带了相应的 cookie,然后进行相应的各种操作,可以是转账汇款以及其他的恶意操作。
  • 自动发 POST 请求:黑客可能自己填了一个表单,写了一段自动提交的脚本,同样也会携带相应的用户 cookie 信息,让服务器误以为是一个正常的用户在操作,让各种恶意的操作变为可能。
  • 诱导点击发送 GET 请求:点击后,自动发送 get 请求,然后进行操作

(三)sql注入

  1. 介绍 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
  2. 特点
    1. 广泛性:任何一个基于SQL语言的数据库都可能被攻击,
    2. 隐蔽性: SQL注入语句一般都嵌入在普通的HTTP请求中,很难与正常语句区分开
    3. 危害大: 攻击者通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁
    4. 操作方便: 互联网上有很多SQL注入工具,简单易学,攻击过程简单,不需要专业知识也能自如运用
  3. 原理:第一步:SQL注入点探测 判断什么地方存在SQL注入点;第二步:收集后台数据库信息;第三步:猜解用户名和密码;第四步:查找Web后台管理入口;第五步:入侵和破坏

荆棘之甲

(一)防御xss

  • 千万不要相信任何用户的输入!无论是在前端和服务端,都要对用户的输入进行转码或者过滤。这样代码在 html 解析的过程中是无法执行的
<script>alert('abcd')</script>//转前

&lt;script&gt;alert(&#39;abcd&#39;)&lt;/script&gt;//转后
 
  • CSP 即浏览器中的内容安全策略,使服务器决定浏览器加载哪些资源,可以限制其他域下的资源加载;禁止向其它域提交数据;提供上报机制,能帮助我们及时发现 XSS 攻击

  • cookie属性设置:HttpOnly属性设置为true; 很多 XSS 攻击脚本都是用来窃取Cookie, 而设置 Cookie 的 HttpOnly 属性后,JavaScript 便无法读取 Cookie 的值。这样也能很好的防范 XSS 攻击

(二) 防御CSRF

  • cookie 属性设置:CRFS用携带的cookie冒充身份,SameSites属性可以控制cookie被请求携带的场合。其中有三个值StrictLaxNone.设置为 Strict,禁止第三方请求携带。
  • 请求头字段设置:用Origin设置请求域名,用Referer设置请求URL路径
  • Token 安全令牌:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。通常第三方站点无法拿到这个 token, 因此也就是被服务器给拒绝。

(三)防御SQL注入(偏前端方法)

  • 通过正则表达校验用户输入 首先我们可以通过正则表达式校验用户输入数据中是包含:对单引号和双"-"进行转换等字符。然后继续校验输入数据中是否包含SQL语句的保留字,如:WHERE,EXEC,DROP
  • 通过参数化存储过程进行数据查询存取: 参数数化存储过程帮我们校验出传递给数据库的变量的类型,控制用户权限
  • 其他:blog.csdn.net/wodetian122…

小结

  • 全是废话,只要记住名字,攻击原理,根据伤害类型,决定出“父亲背心”还是“母亲斗篷”
  • 与安全有关的cookies属性熟记

本人大三,正寻实习,与君共勉,寥有拙作,万望指正

回复

我来回复
  • 暂无回复内容