环境准备
node.js npm
npm config set registry https://registry.npm.taobao.org
npm i -g jspm
jspm i
数据库数据导入:C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -hlocalhost -uroot -pwsc
-Dtest<E:\t1eexx\safety.sql
所谓的安全
私密性:不被非法获取和利用:代码层面,架构层面,运维层面
可靠性:不丢失不损坏不被篡改
安全问题
网站数据库泄露
用户资料被盗取
用户密码泄露
用户身份被盗用
前端XSS
跨站脚本攻击XSS(Cross Site Scripting)恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的
npm start
https://www.baidu.com/?from=<script >alert(1) </script>ggg
http://localhost/?from=<script src='https://code.jquery.com/jquery-3.2.1.js'> </script>ggg
检测网站xss漏洞:添加alert(1)
xss攻击类型:url参数直接注入(转换为短网址) 存储到db后读取时注入
XSS注入点
1.HTML节点内容()
<div>#{content}</div>
<div><script>alert(1)</script></div>
2.HTML属性(提前终止属性)
<img src="#{image}" />
<img src="1" οnerrοr="alert(1)"/>
3.Javascript代码(字符串提前关闭)
<script type="text/javascript">
var data = "#{data}";
var data = "hello";alert(1);"";
</script>
4.富文本
浏览器自带防御,反射性XSS(HTML内容和属性)上面的参数出现在HTML内容或属性两种攻击 ctx.set('X-XSS-Protection',1);
防御
HTML内容: 转义< < > >
HTML属性:空格,单引号,双引号
Javascript代码
富文本:a.黑名单
去掉<script/>….
b.白名单
只允许保留部分标签和属性 (CSP)
跨站请求伪造攻击CSRF(Cross Site Request Forgy)
在其他网站进行了对本网站的操作 (可造成网络网络蠕虫)
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>csrf demo</title>
</head>
<body>
hello,这里什么也没有。
<script>
document.write(`
<form name="commentForm" target="csrf" method="post" action="http://localhost:1521/post/addComment">
<input name="postId" type="hidden" value="1">
<textarea name="content">来自CSRF!</textarea>
</form>`
);
var iframe = document.createElement('iframe');
iframe.name = 'csrf';
iframe.style.display = 'none';
document.body.appendChild(iframe);
setTimeout(function(){
document.querySelector('[name=commentForm]').submit();
},1000);
</script>
</body>
</html>
csrf防御
1.禁止第三方网站带Cookies (设置 same-site目前就谷歌浏览器支持)
2.网站提交时验证码
3.网站加token(<meta name="csrf-token" content="{{ csrf_token() }}">) ps:需要注意多Token覆盖的问题
3.验证referer(禁止第三方网站的请求)
点击劫持,clickjacking,也被称为UI-覆盖攻击
是一种视觉上的欺骗手段。大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面;二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义.
防御
1.JavaScript禁止内嵌
2.X-FRAME-OPTIONS禁止内嵌
传输安全
传输安全问题(HTTP传输明文可造成窃听)
Tracert 命令(win)
一个探测路由的程序,可以让我们看见IP数据报到达目的地经过的路由
anyproxy 代理\ssl\https部署\证书的申请与 (还得多去了解)
密码安全
哈希算法
明文 -> 密文
雪崩效应(密码混乱)
不可逆性
密文固定长度
md5 sha1 sha256
加盐
接入层sql注入
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
判断一个页面sql注入问题:恒等的时候正常,恒不等的时候报错就是存在sql注入问题
sql注入防御
关闭错误输出
检查数据类型
对数据进行转义
使用参数化查询(彻底)
使用ORM(对象关系映射)(彻底)
nosql注入防御
检测数据类型(有效)
类型转换(有效)
写完整条件
接入层文件上传
再次访问上传的文件时,文件被当成程序解析
防御
限制上传后缀
文件类型检测
文件内容检测
程序输出(彻底)
权限控制-可写可执行互斥
其他安全问题
1.拒绝服务DOS(模拟正常用户\大量占用服务器资源\无法服务正常用户| TCP半连接\http连接\DNS)
防御:
防火墙\交换机路由器\流量清洗\高防IP
避免重逻辑业务\快速失败快速返回\防雪崩机制\有损服务(主功能正常,允许一些功能不正常)\CDN
2.重放攻击(请求被窃听或记录\再次发起相同的请求\产生意外的结果)
防御:
加密\时间戳\token(session)\noce\签名