# 前端网络安全

# XSS攻击

  • XSS跨站脚本攻击,对于前端来说一般是指js代码注入攻击
  • 比如页面中创建了一个input输入框用于保存评论,当提交表单的时候,将会把输入框的内容提交保存在服务器。如果保存的是一段注入的js代码,那么当别人访问这个评论的时候就会被攻击
------------------注入端----------------------
// 用户输入的数据都会被转成value的值
<input type="text" value="">
// 注入评论信息:</p><script>alert('hi')</script><p>
------------------受害端----------------------
//受害者通过访问注入者的评论信息
<p>注入者评论信息</p>
// 如果成功注入到服务器那么将会显示如下
<p></p><script>alert('hi')</script><p></p>
// 这样一来每个访问此条评论的用户都会弹出'hi',如果是更加恶意的代码,可想而知后果
1
2
3
4
5
6
7
8
9
10
  • 如果注入者通过注入代码,获取到了cookie的信息,那么就可以伪造用户对服务器发起请求,篡改或者盗取信息
  • 对于上述js注入可以直接对用户的输入进行特殊字符转义,比如对<>进行转义成&lt、&gt,使其失去标签效果

对于jquery的append操作dom注入js

  • 如果网站可以通过用户操作使用的是jquery进行append时,那么就可以通过添加dom注入js代码
  • 由于jquery的append是将添加dom变为fragment,如果添加的内容包含标签,那么会再执行一遍eval,而且append使用的方式也是通过innerHTML插入内容,innerHTML会将unicode码转成字符实体
  • 那么我们就可以通过jquery的append插入带有unicode表示的<>\u003c、\u003e,从而使标签生效
// 原网页这有这段代码
<p>添加的内容</p>
<input type="text">
<button type="button">添加</button>
<script>
  $('button').click(function(){
    var value = $('input').val()
    $('p').append(value)
  })
</script>
// 输入框注入代码:\u003c/p\u003e\u003cscript\u003ealert('hi')\u003c/script\u003e\u003cp\u003e
也就是把<>用unicode码表示,当innerHTML的时候会自动转从对应的字符,从而使得标签有效
1
2
3
4
5
6
7
8
9
10
11
12
  • 对于上述注入,我们可以再对unicode的\进行转义如\u003c转成\\u003c,这样就没有那个效果了,不会当作unicode处理了
  • 还有一种通过url注入js代码,如果没有对url参数进行转义,直接渲染在页面上那么将会被攻击
  • 防止cookie被盗取,我们可以在服务端设置cookie的时候加个httpOnly标识,cokkie只允许http协议传输,不能由js读写

# XSS攻击包括以下三种类型

  1. 反射型(非持久):比如我输入的搜索内容,确认搜索之后,当服务器解析响应之后,把输入的内容又呈现出来,那么我们如果注入js代码没有进行防御措施,那么将会在页面上执行代码,比如搜索页面
  2. 存储型(持久):比如之前的那个评论注入,这个评论信息会被保存在服务器,公开展示给所有访问者,对于这种攻击危害更大
  3. DOM型,就比如jquery的例子,点击添加一个链接,如果链接的文件是一个恶意脚本,那么将会被执行

对于xss攻击一般采用转义特殊字符,就能解决大部分问题,不过有些还需要特殊处理

# CSRF攻击

  • csrf或者xsrf跨站请求伪造,劫持受信任用户向服务器发送非预期请求的攻击方式,也就是冒充用户给服务器发送信息

get类型

  • 当你访问正规网站时,如果黑客在那个网站埋下陷阱,访问黑客的网站,当你在正规网站上触发访问了黑客的网站时,黑客在自己的网站上对正规网站服务器发送一些数据,而且是通过你的身份认证发起的,那么服务器会认为是你在操作
  • 比如正规网站使用的img图片src来自黑客网站,那么黑客可能通过在请求img的时候修改url再对原网站请求数据,那么就相对于利于你的身份对正规网站发起get请求

post类型

  • 当你访问的网站被黑客入侵过,黑客在原网站上放一个写好的form表单隐藏起来,诱导你点击一个按钮或者插入自动提交表单程序,那么你将会访问黑客的网站,向服务器发送post请求
  • 或者在页面中伪造一个透明的iframe,在你不知情的情况下发起请求

对于CSRF攻击主要点就是利于用户自己的登录凭证,冒充用户提交操作,总的来说就是伪造提交冒充用户,并不是窃取用户数据

对于CSRF的防范

  • csrf通常是从第三方网站发起的,那么服务器可以通过同源检测禁止第三方网站携带cookie请求,设置sameSite属性,来禁止通过第三方发起的请求
  • 通过验证码来验证是用户操作,通过服务端返回的验证码验证是本人操作,黑客是无法获得服务端返回的验证码
  • 通过服务器设置页面的token,验证是否为本页面发起的请求
  • 通过检测请求来源,在服务端通过解析请求头部的Origin Header与RefererHeader识别请求来源,来判断是否为外域请求
  • 对于iframe在请求头中设置X-Frame-Options属性,禁止加载iframe

# SQL注入

  • 一般的sql注入指的就是数据库注入代码,比如没有对数据库指令进行转义就执行,那么黑客有可能对存入数据库的数据注入sql语句达到控制修改数据库
  • 这种注入风险更大,可能会导致数据库暴露给黑客,类似xss代码注入,黑客通过评论注入sql语句,当服务器执行sql语句时没有进行转义就执行,那么很可能通过拆分sql的方式注入sql代码实现操作数据库

防范

  • 对于sql注入,现在一般都有专门转义sql语句的api直接通过转义特殊字符,使保存的数据失去sql语句作用,类似xss转义
  • 通过设置数据库权限控制,给数据库中每个表设置不同用户的权限,降低风险
  • 数据库错误日志不要直接返回给客户的,隐藏错误细节

# DDoS攻击

  • DDoS分布式拒绝服务攻击,是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击
  • 这种攻击一般是让服务器瘫痪,导致服务器无法进行服务
  • 通过操控多个地方的受害机器对同一目标发起DDoS攻击,比如在一个热门网站(有漏洞)的点赞按钮上放一个透明iframe,对目标网站发起请求,如果目标服务器的带宽不大,那么在短时间内受到多处的持续请求,可能会导致网络变慢,严重者瘫痪
  • 如果在使用http发起的请求中,修改tcp的请求报文,把源目标地址修改成不存在的地址,那么受攻击的服务器会一直对不存在的地址重新发起响应,处于半连接状态,如果多处持续攻击,那么目标服务器可能就会因为半连接状态太多导致系统卡顿,最终瘫痪

DDoS就是让目标服务器瘫痪,使其不能进行正常的服务

防范

  • 对于大量的不知情访问,提高服务器的带宽,让其能够接受更多的请求,这样也能降低影响
  • 对同一源的请求做节流处理,不允许长时间频繁的请求,如果发现来源相同,且请求量很大,那么可以短暂的拒绝此服务
  • 通过服务器集群,分散服务线路,由多台服务器同时服务,这样就不怕一个服务器被攻击,而导致网站不能服务
  • 主干网络以及周边设备要做好防范攻击准备,以及使用备份设备等

# DNS劫持

  • 一般情况下DNS被劫持都在同一个网络范围内,对指定域名解析的请求拦截下来,返回一个伪造的ip地址,从而控制用户访问网站
  • 比如在一个学习内网中,有人攻击了学习本地的DNS服务器,对其拦截所有的dns请求,把指定访问的域名拦截下来,返回一个不存在或者是伪造的ip地址给请求的用户,导致用户访问假的网站

DNS劫持主要有本机dns劫持、路由dns劫持、dns服务器劫持,总的来说就是修改dns解析的ip来控制访问的目标

DNS劫持防范

  • 通过修改本机的dns服务器地址,写死DNS服务器对应的ip地址
  • 通过ip地址访问网站,或者在本机dns解析表中写好域名对应的ip地址,使其不需要dns解析
  • 修改路由器的dns服务器地址,不使用自动寻找
  • 计算机杀毒,防止本机dns劫持

# 钓鱼网站

  • 一些黑客通过伪造正规网站页面,来欺骗用户在其网站输入个人信息,导致信息暴露
  • 或者使用一些诱人方式,诱导用户访问其网站,输入个人信息

防范

  • 对于这种网站,我们需要有足够的辨别力以及自控力,不要被其欺骗,只在正规网站输入个人信息
  • 对于自身的隐私信息,不要轻易暴露,也不要访问不良网站,这都很有可能被黑客攻击

# ARP欺骗

  • ARP地址解析协议,是根据IP地址解析物理地址的一个TCP/IP协议
  • 主机将包含目标IP地址信息的ARP请求广播到网络中的所有主机,并接收返回消息,以此确定目标IP地址的物理地址
  • 在局域网内,一台主机发送IP地址解析时,会在局域网内发起ARP广播请求,当某个主机发现ARP中请求的ip地址是通过我发送出去的,那么将会给发起ARP请求的主机返回自己的MAC地址,从而发起ARP请求的主机就知道往哪里走
  • 当在局域网内有台主机中了ARP病毒,对所有ARP广播请求监听,对发起ARP请求的主机响应,把自己的mac地址返回,这样一来原发起请求的主机就认为这台主机是目标设备,那么之后的请求都会发往病毒主机
  • 在局域网内,一般需要通过网关来实现对外网访问,但是如果中了ARP欺骗,那么攻击者可以修改发送者的数据,再通过真正网关发起请求

防范

  • 对于ARP欺骗,一般的主机是不会理会其他主机的ARP请求,除非中了病毒,那么将会监听局域网内全部的ARP请求,所以对主机进行定期杀毒是很有必要的
  • ARP欺骗局限于局域网内,如果能直接知道网关mac地址那么就不会被欺骗了,通过手动绑定网关mac地址,这样就只会向网关发送数据,而不会被欺骗了
上次更新: 2020-8-22 21:22:03