2019-2020-2 网络对抗技术 20175211 Exp9 Web安全基础
各种Web安全问题的总结
- SQL注入
- CTF XSS
- SSRF(服务器端伪造请求)
- 文件上传
- 文件包含
- RCE(远程代码执行)
- XXE(XML外部实体注入)
- SSTI(服务器模板注入)
- PHP反序列化
- Node.js 相关安全问题
Write-up
- SQL注入
- XSS
基础问题回答
SQL注入攻击原理,如何防御
- 原理:将用户的输入拼接进sql语句作为代码执行。
- 防御:
- 尽量使用预编译的方法执行sql语句
- 对用户的输入进行过滤
- 对用户的输入转义。注意从数据库中取出数据再拼接成sql语句的时候也要转义,避免二次注入
- 注意配置正确,避免宽字节注入、堆叠注入这种问题
- 永远不要明文存密码。虽然不能叫防御,但是可以把损失降低到最少
XSS攻击的原理,如何防御
- 原理:将用户的输入直接输出到html中,使攻击者可以通过闭合标签等方法注入js语句
- 防御:
- 转义
- csp
CSRF
- 原理:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。只要诱使携带cookie等身份认证信息的客户访问攻击者构造的恶意链接——也就是网站的各种api,就可以执行攻击者本身没有权限,而受害者非自愿的行为
- 防御
- 很多框架都支持csrf_token,每次提交表单的token是唯一的,只有携带正确token,服务端才会正确处理
实践收获与感想
最后一个实验,算是我有点了解的领域了。作为半个“赛棍”,web安全的一个重要保证就是数据和代码的分离,也就是数据是数据,不会当做代码执行。这也是为什么eval不建议使用的原因。sql注入的关键——闭合引号、xss的闭合标签都是一个道理,就是将数据逃逸出去,然后被当做代码被执行。总结下来就是:永远不要信任用户的输入
其实绝大部分web安全问题都是代码本身没有考虑周到,打ctf的时候我就经常觉得,现实生活中谁会写出这样的代码?作为开发者,只要对这些漏洞有所了解,应该能避免大部分安全问题。还有一些web安全问题是框架或者组件的漏洞,这就需要随时关注版本更新。毕竟挖0day的大牛是少数,拿着1day打时间差的黑产倒是不少。