其他分享
首页 > 其他分享> > 【面筋烧烤手册】网络安全

【面筋烧烤手册】网络安全

作者:互联网

HTTPS(对称+非对称+CA证书+hash)

对称加密

非对称加密

对称+非对称

中间人拦截

对称+非对称+CA证书

访问baidu过程中的CA操作

常见攻击方式

1、XSS 执行黑客脚本 获取用户控制权

执行黑客注入的脚本,获取别人的控制权

攻击方式

只要可以执行script,那么script能做的他都能做

反射型 - url参数直接注⼊

存储型 - 存储到DB后读取时注⼊

脚本存放数据库,例如评论,那么所有用户都会访问这个评论,从而访问这个脚本

防御

老版本(XSS过滤):

ctx.set('X-XSS-Protection', 1) // 启动XSS过滤 http://localhost:3000/?from=<script>alert(3)</script> 可以拦截 但伪装⼀下就不⾏ 了

CSP(content security policy)增加安全层(白名单)

// 只允许加载本站资源
Content-Security-Policy: default-src 'self'
// 只允许加载 HTTPS 协议图⽚
Content-Security-Policy: img-src https://*
// 不允许加载任何来源框架
Content-Security-Policy: child-src 'none'


ctx.set('Content-Security-Policy', "default-src 'self'")
// 尝试⼀下外部资源不能加载
http://localhost:3000/?from=<script src="http://localhost:4000/hack.js">
</script>

转义字符串 / 屏蔽危险行为

function escape(str) {
str = str.replace(/&/g, '&amp;')
str = str.replace(/</g, '&lt;')
str = str.replace(/>/g, '&gt;')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, '&#39;')
str = str.replace(/`/g, '&#96;')
str = str.replace(/\//g, '&#x2F;')
return str
 }
const xss = require('xss')
let html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>')
// -> <h1>XSS Demo</h1>&lt;script&gt;alert("xss");&lt;/script&gt;
console.log(html)

HttpOnly Cookie

response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly")

2、CSRF 跨站请求伪造

cross site request forgery
它利⽤⽤户已登录的身份,在⽤户毫不知情的情况下,以⽤户的名义完成⾮法操作

攻击方式

例如:

<iframe> 标签规定一个内联框架。 一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。

document.write(`
      <form name="form" action="http://localhost:3000/updateText" method="post" target="csrf">
        添加评论: <input type="text" name="text" value="CSRF评论。。" />
      </form>
      `)
      var iframe = document.createElement('iframe')
      iframe.name = 'csrf'
      iframe.style.display = 'none'
      document.body.appendChild(iframe)
      setTimeout(function() {
        document.querySelector('form').submit();
      },1000)

防御

refer+filter

app.use(async (ctx, next) => {
await next()
const referer = ctx.request.header.referer
console.log('Referer:', referer)
})

验证码证明是用户的操作

Cookie Hashing(证明是来自好网站的cookie)

将cookie进行hash后当作表单数据传过去,服务器接收到表单数据后,对请求中的cookie进行hash,验证表单数据中的cookieHash,因为B站无法获取用户在A站的cookie,所以无法发送cookieHash,故无法通过验证

token

服务端生成一个随机数token,让客户端保存起来或者设置隐藏表单,每次提交表单时都带上token,由于token是随机的而且有时间限制,而B站无法获取到,故其请求无法通过验证
请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。

3、诱惑点击,点击劫持

攻击方式

防御

禁止iframe

JS判断本站页面是不是在最上层

4、SQL注⼊

原因是因为前端可能会直接将拼接SQL语句

// 填⼊特殊密码
1'or'1'='1
// 拼接后的SQL
SELECT *
FROM test.user
WHERE username = 'laowang'
AND password = '1'or'1'='1'

防御

传参错误写法 vs. 正确写法

// 错误写法
const sql = `
SELECT *
FROM test.user
WHERE username = '${ctx.request.body.username}'
AND password = '${ctx.request.body.password}'
`
console.log('sql', sql)
res = await query(sql)
// 正确的写法
const sql = `
SELECT *
FROM test.user
WHERE username = ?
AND password = ?
`
console.log('sql', sql, )
res = await query(sql,[ctx.request.body.username, ctx.request.body.password])

权限不要给太多

敏感字符正则匹配转义

5、OS命令输入

攻击方式

例如:后端要进行OS操作

// 以 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 /* &&

那么就裂开

6、请求劫持

DNS劫持

HTTP劫持

比如:酸酸乳、GitHub。。。
或者会劫持http,只能改成https

7、DDOS攻击

是攻击大类
最常见的就是cc攻击

SYN Flood

此攻击通过向⽬标发送具有欺骗性源IP地址的⼤量TCP“初始连接请求”SYN数据包来利⽤TCP握⼿。⽬标机器响应每个连接请求,然后等待握⼿中的最后⼀步,这⼀步从未发⽣过,耗尽了进程中的⽬标资源;或者是占用了有效访问的带宽,导致正常的访问被服务器拒绝

HTTP Flood

此攻击类似于同时在多个不同计算机上反复按Web浏览器中的刷新 - ⼤量HTTP请求泛滥服务器,导致拒绝服务。

防御

标签:网络安全,iframe,key,面筋,站点,烧烤,cookie,str,客户端
来源: https://blog.csdn.net/weixin_43698328/article/details/113562343