这是我参加第五届青训营伴学笔记创作活动的第8天。
前端开发的世界非常精彩,能够用代码创造出精美、流畅的页面,但是也暗藏着许多安全问题。从两个角度来看到web安全,就是hacker的攻击和开发者的防御。
攻击
Cross-Site Script(XSS)
XSS是称为跨站脚本攻击,是往页面中注入恶意脚本。当访问到页面,这些恶意脚本会被执行,可能会导致隐私泄露、强制使用计算机资源(例如挖矿)等影响。
XSS利用了开发者没有将用户提交的内容进行过滤或者转义,从而转成DOM,例如document.write、innerHTML等API。
XSS一般都是暗地执行脚本,通常是很难从UI上察觉到的。它能够窃取用户信息(如cookie、token)等,甚至能通过执行JS脚本来绘制UI弹窗,来诱导用户填写表单,导致隐私泄露。
XSS攻击分为几种:
-
Stored XSS 存储型XSS
-
Reflected XSS 反射型XSS
存储型XSS攻击是将恶意脚本存入数据库中,然后通过访问页面来读数据进行攻击。假设用户填写了表单,表单内容是一段script标签内容,如果这段内容随表单提交了,存在数据库里,那么就完成了一次XSS攻击。这种攻击危害最大,因为对所有用户可见
反射型XSS直接从URL攻击,例如将攻击脚本嵌入URL的query字段,然后根据字段生成HTML标签,这样就完成了攻击。
Cross-site request forgery(CSRF)
CSRF攻击是在用户不知情情况下,利用用户权限来构造HTTP请求,窃取或者修改用户信息。
假设一个用户收到了封邮件,用户点进邮件的url。这是攻击者伪造的页面,当用户访问该页面,就会带着用户的cookie等信息,向银行发送转账请求。银行服务器接受到请求,发现验证通过,然后用户在不知情的情况下被转账了。
SQL注入
SQL注入是攻击者将SQL语句填写到表单中,表单没有没有经过过滤,将SQL语句返回到服务器,然后就会执行SQL语句,会导致攻击者能够对数据库进行增删改查操作。
Denial of Service(DOS)
DOS是通过某种方式构造大量请求,消耗服务器资源,导致服务器来不及响应其他请求,进而导致服务器崩掉了。
ReDOS是基于正则表达式的贪婪匹配模式,贪婪匹配会导致回溯,增加响应时间,降低接口吞吐量。
DDOS是在短时间内,收到来自大量僵尸设备请求,服务器不能及时完成,导致请求堆积产生雪崩效应。
总结
知彼知己,百战不殆,作为开发者,认识攻击者常用的攻击,才能够做好防御。