0%

网络安全

网络安全这块算是我听得最深的一块,感触也很深,讲师讲课节奏也把控的很好

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

今天这节主讲网络安全的课着实让人听的酣畅淋漓,讲师用攻击人和防御者两人的角度讲了网络安全的重要性。攻防算是各有千秋,譬如HTTPS的CA加密看似非常安全,但黑客们还是能想出来暴力破解的算法,这种道高一尺魔高一丈的感觉显得非常激烈,而网络安全的历史也就是在白客与黑客的攻防中进行发展的。

黑客们

XSS(Cross-Site Scripting)跨站脚本攻击

黑客们利用网站漏洞将脚本注入到页面中,然后就可以执行黑客想要的操作了。如果开发者不对用户输入的内容进行任何排查就插入到DOM之中,就会给这种攻击极大的可乘之机。

危害

  • 难以从UI上感知
  • 可以窃取用户的信息(cookie等)
  • 可以生成恶意表单让用户填写

XSS攻击的种类

  • Stored XSS:恶意脚本存在数据库中,危害极大,对所有用户都有影响
  • Reflected XSS:从URL上进行攻击,是从服务端注入的脚本
  • DOM-based XSS:完全由浏览器端发起并执行攻击
  • Mutation-based XSS:根据浏览器渲染DOM的方式不同,有不一样的效果,是一种难以察觉的攻击方式

CSRF(Cross-site request forgery)跨站伪造请求

跨站伪造请求是在用户不知情的前提下利用用户的cookie构造指定的HTTP请求,从而达到黑客想要的操作。这种攻击方式对用户的财产损失的威胁很大,话说Steam盗取游戏饰品应该就有类似的攻击操作吧。


Injection 注入

  • SQL Injection:如果没有对语句进行任何检测就将其以字符串的方式拼接成SQL语句并执行,那么是非常危险的,黑客们甚至可以利用这个漏洞删除数据库中的所有数据。
  • OS command:如果不对语句进行检测的话,如果黑客们传入一个rm -rf类似的语句就会造成无法挽回的后果。

DOS(Denial of Service)攻击

DoS攻击并不侵入目标服务器或目标网络设备,而是直接通过正则表达式的贪婪匹配等方式耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃。


DDOS攻击

即简单粗暴地用大量来自僵尸设备的请求让服务器无法负载,使其资源耗尽进而实现雪崩效应,无法响应新的请求。


中间人攻击

如果服务端和客户端之间的传输方式是明文传输,并且信息篡改不可知,且双方身份无法得到验证时,这就给中间人提供了巨大的漏洞。中间人可以隐匿地在服务端和客户端之间经手双方传输的数据,而服务端和客户端都以为是在和对方进行直接传输,这样黑客作为中间人就能窃取用户数据甚至伪造用户请求,造成财产损失等严重安全问题。


白客们

如何防范XSS攻击

有两个重要原则,其实广泛适用于所有的网络安全领域:

  1. 永远不要相信用户的提交内容
  2. 永远不要直接将用户的提交内容直接转换为DOM

XSS攻击在现在已经有比较完善的防御机制,无论是浏览器还是服务端(如Node)都有相应的防御体系,白客们并不需要对此过多操心,前人已经造好了轮子。

当然,如果将用户输入的内容转换成DOM是必须的,那么一定要对用户输入的语句进行检测,防止其中含有恶意脚本。


如何防范CSRF攻击

CSP策略(Content Security Policy):同源策略,即针对HTTP请求,当同源时可以进行放行,当不同源时就进行拒绝。并且CSP可以让白客们定义哪些域是安全的,针对没有进入白名单的脚本就拒绝执行。

对于Cookie这种携带重要信息的东西,白客们要决定什么时候允许携带,而什么时候不允许携带。

对于CSRF攻击的防范是比较复杂的,总的来说就是要让开发者判断并且定义哪些请求合法,而哪些请求是不合法的,这需要大量的网络安全知识。


如何防范Injection攻击

使用prepared statement等方式提前编译,防止注入。坚持最小权限原则,一定不能放行sudo权限。同时还要对各种权限进行限制,防止用户使用SQL语句越界。


如何防范DOS攻击

拒绝使用用户提供的正则表达式,并且对白客们自己写的正则表达式进行性能测试,防止服务器资源倾斜。


如何防范DDOS攻击

两大策略

  • 过滤:对于流量进行过滤操作。我经常访问一些网站在访问前要用CloudFlare进行检测后才能进行放行,应该大概率就是对我目前流量的一个检测,防止发起DDOS攻击。
  • 抗量:即服务器收到大量请求时,进行扩容等操作,使服务器能扛下来用户的请求,这种方式可能就要消耗比较大的财力了。

如何防范中间人攻击

目前中间人攻击应该已经比较难行得通了,因为HTTPS几乎已经普及到所有常用的网站上了。HTTPS协议是加密的协议,并且能对双方的身份进行验证,还能对数据进行校验,判断数据是否被篡改。HTTPS协议是利用了数学的魔力,对数据用私钥加密后,用公钥能进行验证操作。不过这就需要CA(证书机构)进行颁发证书操作,其实也就是内置了不同的私钥和私钥算法,并且浏览器预先内置好各大CA的公钥,便于进行HTTPS传输操作。

除非私钥算法被破解,否则中间人攻击是很难以实现的。