前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的
介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢
在我看来,前端可以了解并且防御前4个就可以了(小声逼逼:大佬当我没说)
Cross Site Scripting 又叫做跨站脚本攻击,本身应该叫做CSS,但是由于CSS被占用,无奈下叫做XSS
我们先从字面意义上看一下,跨站->顾名思义就是我们从一个网站跑到了另外一个网站上,脚本->也就是我们往页面中写了脚本内容,可以理解为写了js代码,那么最后我们对网站造成了攻击
例如: 我们在登录了一个网站之后,一般都会把登录状态保存在cookie中,当我们去访问另外一个网站的时候,就会读取到cookie
// 普通
http://localhost:3000/?from=china
// alert尝试
http://localhost:3000/?from=
// 如果可以弹出3,证明这个输入框没有过滤html标记
模拟获取cookie
http://localhost:3000/?from=
后台代码
const koa = require('koa'); //启动在4000端口上
const chalk = require('chalk')
const log = contents => {
console.log(chalk.red(contents)) //打印cookie
}
// 模拟黑客网站
const app = new koa();
module.exports = app
ctx.set('X-XSS-Protection', 0) // 禁⽌XSS过滤
response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly")
CSRF(Cross Site Request Forgery),即跨站请求伪造,是⼀种常⻅的Web攻击,它利⽤⽤户已登录的身份,在⽤户毫不知情的情况下,以⽤户的名义完成⾮法操作。
还是从字面上去分析,跨站还是指从一个网站指向另外一个网站,于XSS不用的是,他是请求,指我们在别的网站上发出一个请求,而这个请求是伪造出来的
点击劫持是⼀种视觉欺骗的攻击⼿段。攻击者将需要攻击的⽹站通过 iframe 嵌套的⽅式嵌⼊⾃⼰的⽹⻚中,并将 iframe 设置为透明,在⻚⾯中透出⼀个按钮诱导⽤户点击。
点击劫持说白了就是诱导用户点击,下面放一张图片,估计就都了解了
X-FRAME-OPTIONS
X-FRAME-OPTIONS 是⼀个 HTTP 响应头,在现代浏览器有⼀个很好的⽀持。这个 HTTP 响应头就是为了防御⽤ iframe 嵌套的点击劫持攻击。
ctx.set('X-FRAME-OPTIONS', 'DENY')
JS方式
sql是我们学习数据库的一种语言,而注入就代表是从前端对数据库下手
下面这段代码可以看出来,当我们进行字符串拼接(拼接sql语句的时候),会出现一种类似于管道符的bug, 1|0,那么这句话为恒为真
// 填⼊特殊密码
1'or'1'='1
// 拼接后的SQL
SELECT *
FROM test.user
WHERE username = 'laowang'
AND password = '1'or'1'='1'
其实防御起来很简单,每个语言都提供了不同的方式,但是原理就是不进行字符串拼接,而是用占位符
OS命令注⼊和SQL注⼊差不多,只不过SQL注⼊是针对数据库的,⽽OS命令注⼊是针对操作系统的。OS命令注⼊攻击指通过Web应⽤,执⾏⾮法的操作系统命令达到攻击的⽬的。只要在能调⽤Shell函数的地⽅就有存在被攻击的⻛险。倘若调⽤Shell时存在疏漏,就可以执⾏插⼊的⾮法命令。
// 以 Node.js 为例,假如在接⼝中需要从 github 下载⽤户指定的 repo
const exec = require('mz/child_process').exec;
let params = {/* ⽤户输⼊的参数 */};
exec(`git clone ${params.repo} /some/path`);
如果参数是
https://github.com/xx/xx.git && rm -rf /* &&
distributed denial of service 分布式系统攻击
DDOS 不是⼀种攻击,⽽是⼀⼤类攻击的总称。它有⼏⼗种类型,新的攻击⽅法还在不断发明出来。⽹站运⾏的各个环节,都可以是攻击⽬标。只要把⼀个环节攻破,使得整个流程跑不起来,就达到了瘫痪服务的⽬的。
其中,⽐较常⻅的⼀种攻击是 cc 攻击。它就是简单粗暴地送来⼤量正常的请求,超出服务器的最⼤承受量,导致宕机。我遭遇的就是 cc 攻击,最多的时候全世界⼤概20多个 IP 地址轮流发出请求,每个地址的请求量在每秒200次~300次。我看访问⽇志的时候,就觉得那些请求像洪⽔⼀样涌来,⼀眨眼就是⼀⼤堆,⼏分钟的时间,⽇志⽂件的体积就⼤了100MB。说实话,这只能算⼩攻击,但是我的个⼈⽹站没有任何防护,服务器还是跟其他⼈共享的,这种流量⼀来⽴刻就下线了。
说白了花钱解决