Web开发之安全防护 | 青训营笔记

154 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

前端开发之安全防护

前言:

今日的课程围绕着Web的安全问题展开的,给我们介绍了安全问题的危害,及从两个角度来介绍网络安全:黑客角度介绍如何攻击,开发者角度如何防御。

攻击篇

1.XSS

XSS主要分为3种类型:

1.持久型跨站:最直接的危害类型,跨站代码存储在服务器,危害最大对全部用户都可见。

2.非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。

3.DOM跨站:DOM,客户端脚本处理逻辑导致的安全问题。主要问题在于程序员盲目信任用户提交的内容。

XSS的特点:

  • 通常难以从UI上感知(暗自执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(例如弹窗),诱骗用户点击/填写表单

2.CSRT

实现原理:在用户不知情的前提下利用用户权限(cookie)构造指定HTTP请求,窃取或修改用户敏感信息。 黑客通过a,img,表单等元素等进行攻击。

image(3).png

3.SQL Injection

通常直接在请求体中写SQL参数或者SQL命令,已达到获取数据,修改,删除数据。不仅可以用于SQL服务端,在CLI脚手架、OS命令行等都可以运用。SSRF(Server-Side Request Forgery)严格来说不算注入,但原理相似。

4.SSRF

实现原理:

  • 请求用户自定义的回调接口 callback URL
  • web server 有内网权限

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

5.DoS攻击

通过某种方式(构造特定请求请求)使得服务器资源被过度消耗而崩溃。

Dos攻击可以从3层开始攻击:

  • 网络层攻击
  • 传输层攻击
  • 应用层攻击

防御层

1.XSS

永远不要相信用户提交的内容,不要把用户提交的内容直接转换为真实DOM,而是用字符串存着,在现在的主流框架中默认防御 XSS,服务端(node)用DOMPurify。

2.CSRT

防御措施:

1.Token验证
×××原理中访问漏洞接口的时候浏览器只上传了cookie,没有手动的上传一个token。这个token是用户登录注册甚至只是访问网站A,服务器会自动向用户本地存储一个token,在用户访问各个接口的时候,如果没带这个token,服务器就不会通过验证。所以当用户点击引诱链接,这个链接只会自动携带cookie,但是不会自动携带token,这样就能避免×××。

2.Referer验证
Referer,即页面来源。服务器通过判断页面来源是不是自己站点的页面来源,如果是就执行接口动作,如果不是一律拦截。这样也能避免×××。

3.隐藏令牌
类似于Token验证,原理是把token放在HTTP头的自定义属性中,而不是把信息放在链接上,增加了隐蔽性。本质上和Token验证没什么区别,只是用法上的一些区别。

3.SQL Injection

采用sql语句预编译和绑定变量,是防御sql注入的最佳方法

sql语句预编译和绑定变量
String sql = "select id, no from user where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeQuery();

总结

网络安全小白,这节课弥补了我对前端安全的认识,也明白了网络安全对我们的重要性。

参考文献:

跨站脚本攻击xss包括哪三大类型 www.php.cn/safe/453271…

前端知识 |前端安全之CSRF www.yisu.com/zixun/83476…

SQL 注入防御方法总结 blog.csdn.net/qq_35114086…