2019-2020-2 网络对抗技术 20175211 Exp9 Web安全基础

各种Web安全问题的总结

Write-up

基础问题回答

SQL注入攻击原理,如何防御

  • 原理:将用户的输入拼接进sql语句作为代码执行。
  • 防御:
    • 尽量使用预编译的方法执行sql语句
    • 对用户的输入进行过滤
    • 对用户的输入转义。注意从数据库中取出数据再拼接成sql语句的时候也要转义,避免二次注入
    • 注意配置正确,避免宽字节注入、堆叠注入这种问题
    • 永远不要明文存密码。虽然不能叫防御,但是可以把损失降低到最少

XSS攻击的原理,如何防御

  • 原理:将用户的输入直接输出到html中,使攻击者可以通过闭合标签等方法注入js语句
  • 防御:
    • 转义
    • csp

CSRF

  • 原理:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。只要诱使携带cookie等身份认证信息的客户访问攻击者构造的恶意链接——也就是网站的各种api,就可以执行攻击者本身没有权限,而受害者非自愿的行为
  • 防御
    • 很多框架都支持csrf_token,每次提交表单的token是唯一的,只有携带正确token,服务端才会正确处理

实践收获与感想

最后一个实验,算是我有点了解的领域了。作为半个“赛棍”,web安全的一个重要保证就是数据和代码的分离,也就是数据是数据,不会当做代码执行。这也是为什么eval不建议使用的原因。sql注入的关键——闭合引号、xss的闭合标签都是一个道理,就是将数据逃逸出去,然后被当做代码被执行。总结下来就是:永远不要信任用户的输入
其实绝大部分web安全问题都是代码本身没有考虑周到,打ctf的时候我就经常觉得,现实生活中谁会写出这样的代码?作为开发者,只要对这些漏洞有所了解,应该能避免大部分安全问题。还有一些web安全问题是框架或者组件的漏洞,这就需要随时关注版本更新。毕竟挖0day的大牛是少数,拿着1day打时间差的黑产倒是不少。

posted @ 2020-05-19 15:53  MustaphaMond  阅读(231)  评论(0编辑  收藏  举报