前言
最近看了《白帽子讲WEB安全》,书的内容可能已经过时了,但是用来提高安全意识还是不错的,现在将它记下来做个总结。
WEB安全整体给我的感觉是虽然重要,但攻击手段有限,安全的大头还是在服务器安全这块。
XSS攻击
先来第一个,XSS攻击,XSS攻击主要分为两类: 1、存储型XSS 2、反射型XSS ,先来看反射型XSS攻击。
反射型XSS攻击
所谓反射型XSS攻击其实就是利用JAVASCRIPT解析漏洞,将原本该解析成HTML的内容解析成了JS代码,那么如何实现攻击的呢? 假设某个20年前原始的网站有如下代码:
1 | 请输入搜索关键字:<input type="text" name="search" > |
此时我们输入:<script>alert('xss')</script>
,点击搜索后,发现页面上打印alert(xss)了,但是这样只是控制了自己的浏览器JS,没有意义(用浏览器控制台一样可以做到),因此要将此漏洞散布出去。
假设它的搜索请求url是:http://reiner.host/search?keyword=WEB安全总结 ,将其改为 http://reiner.host/search?keyword= ,并将链接分享出去,诱导别人去点击。
此时这个倒霉鬼如果刚好登陆了该网站,那么你就可以通过JS拿到他的sessionId,然后弄个不可见的iframe将sessionId传到自己的服务器,从而为所欲为了。
PS:担心加上JS代码后链接过长可以弄个短链接。
所以防止反射型XSS的关键点在于不能直接将用户输入的内容展现出来,绝大部分前端框架一般是解决了此问题的,即用户输入内容不会被浏览器解析为JS代码,但不排除一定就没有XSS漏洞了。
防反射型XSS攻击总结
1、对于用户输入的内容不要直接展示
2、使用稳定的开源框架,一般有自动处理
这就是为什么要注意不要乱点链接
储存型XSS攻击
此类漏洞危害性最大,是反射型XSS攻击的加强版,原理依旧是将用户输入内容解析为JS代码。
假设某论坛没有对用户输入内容做处理直接展示,此时我新建一个帖子,内容如下:
1 | <script> |
标题为:震惊!一对男女大白天在办公室竟干出这种事!(附图片) ,我相信会有很多人点进来,然后他们就会自动打开新窗口,他们的session id我全知道了。
如果想做得绝一点,甚至可以做个隐藏表单提交,表单请求一些删除操作的接口。。。
防存储型XSS攻击总结
1、在做好反射型XSS攻击的基础上增加XSS过滤器,github上应该有很多现成的xss过滤器可以用,将js代码转义再存储
2、设置http header里的http only 为true,这样浏览器会禁止js代码读取cookie
CSRF跨域脚本攻击
CSRF其基本原理是伪造请求,即对于服务器来说,请求是合法的,但是这可能并不是用户主动发起的,假设某论坛网站的删除接口URL是 https://reiner.host/delete?id={id}
通过查看帖子我知道了某用户的一个帖子ID是1,此时我给该用户发私信了,内容是: <img src="https://reiner.host/delete?id=1"/>
。
该用户打开私信时看到的只是一张加载失败的图片,但是实际上浏览器已经请求了delete接口,他的ID为1的帖子已经被删除了。
防CSRF跨域脚本攻击总结
1、 Referer check来源检查,请求不能是通过其它域名请求过来的。
2、使用TOKEN验证用户身份,这样伪造请求的接口地址中没有TOKEN就无法请求成功
以上均为示例,实际攻击手段各种各样。
FLASH漏洞
这个玩意漏洞一堆,所以可以看到chrome为了安全已经把它禁用了,而且这个年代已经没有人使用FLASH了,因此FLASH直接PASS 。
SQL注入
这个年代SQL注入基本上已经凉了,除非某些新手同志写代码不好好用占位符,假设漏洞代码如下 :
1 |
|
在登陆框里输入用户名为:admin --
密码: 随便填 ,拼出来的SQL就变成了:SELECT * FROM USER WHERE USER_NAME = admin --AND PASSWORD=123
,后面的条件都注释掉了。
应对方法
1、使用参数占位符,举例:jdbcTemplate.query("SELECT * FROM USER WHERE USER_NAME = ? AND PASSWORD = ?",userName,password);
,使用mybatis的${}要注意,此符号是拼接SQL。
2、参数过滤,每个添加、修改请求过滤参数里可能存在的敏感字符,如UPDATE DELETE 等,网上已经有大量的开源工具可以帮我们过滤。
会话劫持
浏览器和服务器之间的通信内容被人抓包到了,劫持人获得了你的TOKEN以及所有请求内容
解决:
1、上HTTPS
2、每次请求返回带上下一次请求的随机数,后端验证该随机数是否正确
其它安全
不在WEB安全范围内,有如下几点:
- TCP连接攻击
- DDOS攻击
- 服务器安全配置
- 系统漏洞扫描
其它WEB安全:
- 代码扫描
- XSS漏洞扫描
渗透测试工具
- SQLmap - 可自动检测和利用SQL注入漏洞
- John the Ripper - 一款免费的密码破解软件工具
- Netsparker Security Scanner - 用于渗透测试的Web应用工具
- W3af - 分析和利用基于Web的应用中可能存在的任何安全漏洞
以上工具可以帮助我们发现WEB应用中可能存在的漏洞。
- 本文作者: reiner
- 本文链接: https://reiner.host/posts/d581b2e3.html
- 版权声明: 转载请注明出处,并附上原文链接