XSS攻击——跨站脚本攻击
- 存储型XSS攻击
将脚本通过评论区或帖子等形式,注入到原网站服务器,当其它用户获取该帖子或者评论时,就会从服务器中拿到该病毒脚本,如果是该脚本是打开攻击者的网站,那攻击者就能拿到用户的登录凭证等信息。
- 反射型XSS攻击
利用原网站对js的自动处理,比如使用url上的资源路径渲染,或者document.write()执行的一些操作
- Dom型XSS攻击
黑客通过各种手段将恶意脚本注入用户的页面中,比如通过网络劫持在页面传输过程中修改 HTML 页面的内容,这种劫持类型很多,有通过 WiFi 路由器劫持的,有通过本地恶意软件来劫持的,它们的共同点是在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据
解决方法:
- 对代码进行过滤、转义
- cookie使用 httpOnly 禁止js获取cookie
- 使用CSP设置请求头或者meta标签
CSRF攻击——跨站请求伪造
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。
当黑客拿到用户的登录状态后可能进行的三种攻击方式
- 自动提交get请求,通过图片等资源路径在网页加载时的自动请求
- 自动提交post请求,创建一个隐藏的form表单,在用户打开后自动提交
- 引诱用户点击链接,通过a标签或者js操作,引诱用户主动发起请求
解决方案:
使用cookie的 samesite 属性,禁止第三方站点携带cookie
strict 完全禁止第三方cookie
Lax post、img或者iframe等标签加载的url都不会携带cookie,打开链接和get请求的表单都会携带cookie
none 任何方式都不会携带cookie
验证请求的 来源站点
- 通过Origin字段,只记录了域名,不包括资源路径,优先级大于referer
- 通过referer字段
CSRF Token
- 在浏览器向服务器发起请求时,服务器生成一个 CSRF Token。CSRF Token 其实就是服务器生成的字符串,然后将该字符串植入到返回的页面中。
- 需要带上页面中的 CSRF Token,然后服务器会验证该 Token 是否合法。如果是从第三方站点发出的请求,那么将无法获取到 CSRF Token 的值,所以即使发出了请求,服务器也会因为 CSRF Token 不正确而拒绝请求。