第21题:前端常见的攻击方法:XSS、CSRF、SQL注入

题目:

前端常见的攻击方法包括:ABC
A: XSS
B: CSRF
C: SQL注入
D: ARP攻击

推荐好文:常见六大Web安全攻防解析

解析
什么是XSS?

跨站脚本攻击(Cross Site Scripting),为了不使其与层叠样式表的缩写混淆,故跨站脚本攻击的缩写为XSS。恶意攻击者往Web页面里插入Script代码,当用户浏览该页面时,嵌入其中的Web里面的脚本代码会被执行。从而达到攻击用户的目的。(比如获取用户的Cookie、导航到恶意的网站等)。

大部分的 XSS 漏洞都是由于没有处理好用户的输入,导致恶意脚本在浏览器中执行。任何输入提交数据的地方都有可能存在 XSS。

  • 原理:页面渲染的数据中包含可运行的脚本

  • 攻击的基本类型:反射型(url的直接注入) 和存储型(存储到DB后读取时注入)

  • 如何攻击:修改HTML节点内容或者执行js代码

    (1)修改HTML节点内容

    <!-- http://www.domain.com?name=<script>alert(1)</script> -->
    <div>{{name}}</div>
    

    反射型攻击 : 构造一个包含 XSS 代码的 URL,诱导用户点击链接,触发 XSS 代码,达到劫持访问、获取 cookies 的目的。

    上述中,URL的输入可能会导致HTML 改为 < div>< script>alert(1)< /script>< /div> ,这样页面中就凭空多了一段可执行脚本 。这种类型就是反射性攻击。

    (2)执行js代码

    //javascript代码
    <script>
    	alert(1);
    </script>
    

    存储型攻击: 服务器将用户输入的恶意脚本,没有经过验证就存储在数据库中,并且通过调用数据库的方式,将数据呈现在浏览器上,当页面被用户打开时,恶意脚本就会被执行。这种存储型攻击的危害性更大。

    上述中,比如写了一篇包含攻击代码 < script>alert(1)< /script> 的文章,那么可能浏览文章的用户都会被攻击到。这种类型就是存储型攻击。

XSS攻击防御

XSS的漏洞是由于用户提交的数据没有经过严格的过滤处理造成的,所以防御的原则就是不相信用户输入的数据,对输入进行过滤,对输出进行编码。

  • 浏览器自带防御机制,主要应对反射型攻击(HTML内容或属性):http响应头中自动添加x-xss-protection,值为0(关闭),1(打开),默认打开
  • 对不可信数据进行 HTML Entity 编码,如“<”、“>”、“&”等这些特殊字符不允许在文本中直接使用,需要使用实体字符。
  • 针对用户提交的数据进行有效的验证,只接受规定的长度或者内容,过滤其他的输入内容。
    • 如表单数据值指定的类型只能规定的类型
    • 过滤特殊的HTML标签< script>、< iframe>等
    • 过滤js事件的标签:onclick、onerror、onfocus等
  • CSP(Content Security Policy)内容安全策略:用于指定哪些内容可执行
//我们可以在http响应头中设置Content-Security-Policy
//图片可以从任何地方加载(注意 "*" 通配符)
//多媒体文件仅允许从 media1.com 和 media2.com 加载(不允许从这些站点的子域名)
//可运行脚本仅允许来自于userscripts.example.com
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

//同时meta中也支持设置Content-Security-Policy
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
什么是CSRF?

跨站请求伪造(cross-site Request Forgery),与XSS不同的是,XSS利用站点内的信任用户,而CSRF则是伪造用户的请求利用受信任的网站。

  • 原理: 在第3方网站向本网站发起请求
    第21题:前端常见的攻击方法:XSS、CSRF、SQL注入_第1张图片
    (1) 用户在a站前端发起请求
    (2) a站后端确认身份,登录成功,cookie中存在用户的身份认证信息
    (3) 用户未退出网站a之前,在同一浏览器中打开一个TAB页访问第3方站点b
    (4) b站前端带着a站的cookie信息向a站后端发起请求,请求成功

上述中,只要用户访问了b站的前端,b站就可以在用户完全不知道的情况下,带着a站的用户cookie向a站发起请求

CSRF攻击防御

从上面CSRF攻击的特点来看:b站带着a站中的cookie信息,请求不经过a站的前端,http请求头中的referer字段为b站 。防御的方法可以利用这一点。

  • 验证http中的referer字段

    在http协议中,在http头部中有一个字段referer字段,它记录着http请求的来源地址。要防御CSRF攻击,验证其referer字段是不是合法的,如果是其他网站的话,就拒绝该请求。

  • 在请求地址中添加token验证

    CSRF之所以能够成功,就是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证都是存在于cookie中,因此黑客可以直接利用用户的cookie来通过验证。要预防CSRF攻击,关键在于在请求中放入黑客不能伪造的信息,并且该信息不存在于cookie中。可以在http请求中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token,如果请求中没有token或者token不正确,就拒绝该请求。

  • 验证码验证

    当发起请求时,前端需要输入本网站页面的验证码信息,后端对验证码进行验证,验证码正确才会进行相关操作(存取数据等)

  • 禁止第三方网站携带本网站的cookie信息
    设置same-site属性,same-site属性有两个值,Strict(所有的第三方请求都不能携带本网站的cookie)和Lax(链接可以,但是form表单提交和ajax请求不行)

什么是SQL注入?

在编写代码时,没有对用户输入的数据进行合法性判断,使得程序出现安全隐患。黑客可以把SQL命令插入Web表单提交或输入域名或页面请求的查询字符串,根据返回的结果,来获得他想要的数据。这就是SQL Injection,即SQL注入。

  • 原理:找到SQL注入的位置,判断服务器类型与数据可类型,进行SQL注入。

SQL注入的实例:

比如在一个登录界面,要求输入用户名与密码:
可以这样输入一个实现免账号登录:

用户名: or 1 = 1 –
密码:

点击登录,如果没有做任何验证处理,那么黑客就可以直接登录进去了。

为什么呢?
从理论上说,后台认证的SQL语句会有:

String sql =  "select * from user_table where usename= ' " + userName +" ' and password=' "+password+" '";

当输入了上面的用户名后,上面的SQL语句就变成了:

 SELECT * FROM user_table WHERE username = 'or 1= 1 -- and password' 

这样一来,不管用户名是什么都一定会成功,后面加的两个 --是注释,将后面的语句注释了,这样一来就不用输入密码了。

SQL注入的防御
  • 普通用户与系统管理员用户的权限要有严格的区分
  • 强迫使用参数化语句
  • 加强对用户输入的验证
ARP攻击

ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址。

ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。不是前端的攻击方式。

ARP攻击原理:

  • 交换网络的嗅探

    监听者主机为A,主机B,C在进行通信,主机A想嗅探B,C之间的通信。于是A伪装成C对B做ARP欺骗,让B认为C的IP地址映射到的MAC地址为主机A的MAC地址。这样B先要发给C的数据,就发给了A

  • IP地址冲突

    主机A更改IP地址为主机B的IP地址,造成IP地址冲突

  • 阻止目标的数据包通过网关

    比如在一个局域网内通过网关上网,那么局域网内部的计算机上的ARP缓存中就存在网关IP-MAC对应记录。如果该记录被ARP病毒更改,那么该计算机向外发送的数据包就会发送到了错误的网关硬件地址上。这样.该计算机就无法上网

ARP攻击防御
  • 不要把网络信任关系单纯地建立在IP基础上或MAC基础上(RARP同样存在欺骗的问题),应在网络中架设DHCP服务器,绑定网关与客户端IP+MAC,该做法需要注意的是要保证网络中的dhcp服务器相互之间不冲突。
  • 添加静态的ARP映射表,不让主机刷新设定好的映射表,该做法适用于网络中主机位置稳定,不适用在主机更换频繁的局域网中。
  • 停止使用ARP,将ARP作为永久条目保存在映射表中。
  • 架设ARP服务器。通过该服务器查找自己的ARP映射表来响应其他机器的ARP广播。
  • IP的传输使用“proxy”代理。
  • 使用防火墙等连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。

参考链接:ARP攻击

你可能感兴趣的:(前端面试题汇总,前端攻击,XSS,CSRF,SQL注入)