学学XSS攻击的原理和防范

Xss(跨站脚本攻击)

一种代码注入攻击,攻击者在目标网站注入恶意脚本,使其在浏览器上运行,利用这些脚本,攻击者可以获取用户的敏感信息,如Cookie,SessionID,进而危害数据安全

XSS常见注入方法

  • 利用如提交表单、发布评论等方式将事先准备好的恶意脚本注入到那些良性可信的网站中
  • 在标签的 href、src 等属性中包含脚本代码
  • 在 style 属性和标签中,包含类似 background-image:url("javascript:..."); 的代码

XSS分类

根据攻击的来源,xss攻击可分为存储型,反射性,Dom型

存储型XSS

它是最危险的一种跨站脚本,比反射性XSS和Dom型XSS都更有隐蔽性。因为它不需要用户手动触发,任何允许用户存储数据的web程序都可能存在存储型Xss漏洞。若某个页面遭受存储型Xss攻击,所有访问该页面的用户会被Xss攻击

攻击步骤:

  1. 攻击者把恶意代码提交到目标网站的数据库中
  2. 用户打开目标网站,网站服务端把恶意代码从数据库中取出,拼接在HTML上返回给用户
  3. 用户浏览器接收到响应解析执行,混在其中的恶意代码也被执行
  4. 恶意代码窃取用户敏感数据发送给攻击者,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

存储型 XSS(又被称为持久性XSS)攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。

反射型Xss

反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

攻击步骤:

  1. 攻击构造出特殊的url,其中包含恶意代码
  2. 用户打开带有恶意代码的url,网站服务端将恶意代码从url中取出,拼接在HTML上返回给用户
  3. 用户浏览器接收到响应解析执行,混在其中的恶意代码也被执行
  4. 恶意代码窃取用户敏感数据发送给攻击者,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

反射型 XSS (也被称为非持久性XSS)漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。

Dom型Xss

攻击步骤类似于反射型Xss也是构造出特殊的url,不过恶意代码的取出和执行由浏览器完成,前两个是由服务端完成。防范Dom型的Xss是前端不可推卸的责任。

类型 存储区 插入点
存储型XSS 后端数据库 HTML
反射型XSS URL HTML
DOM型XSS 后端数据库/前端存储/URL 前端 JavaScript

防御Xss

只要有输入数据的地方,就可能存在 XSS 危险。

常用防范方法

  • httpOnly:在cookie中设置Httponly后,js脚本无法读取cookie的信息
  • 输入过滤:对输入格式的检查,不能出现脚本
  • 转义Html:在拼接Html时,需要对尖括号,斜杠,引号等进行转义。

预防存储型和反射型Xss

恶意代码都是在服务端中取出,插入到Html中。 改成纯前端渲染,把代码和数据隔开(通过ajax获取业务数据来渲染页面 ) 对HTML进行充分的转义

预防Dom型Xss

避免使用.innerHTML、.outerHTML、document.write(),v-html DOM 中的内联事件***,如 location、onclick、onerror、onload、onmouseover 等,a 标签的 href 属性,JavaScript 的 eval()、setTimeout()、setInterval() 等,都能把字符串作为代码运行

全部评论

相关推荐

05-04 09:38
已编辑
门头沟学院 引擎开发
个人9本海硕,本硕期间一直在投游戏相关实习/校招,岗位由客户端->引擎->TA->AIGC。最终目标肯定是独游制作人,所以程序策划美术都点了些,感觉也没谁了。值此春招末尾总结下技术向校招要点,算是回馈牛客社区了。也附上我的Github和个人博客,欢迎各种交流讨论。 前言 首先是个人惯例的劝退游戏行业。参见缅怀故人 和永远有多远 ,相比于互联网,游戏薪资大概相当但要求更高,加班严重且更为局限。如果你只是带着一腔热情想入这行,建议先找个日常实习了解下真实的游戏行业再做选择。 准备 当然,在你决定踏出这步后,第一步就是准备相关的笔试面试。这里先建议找到你感兴趣的公司岗位的JD,然后...
牛客28967172...:说的还是有道理的,我校招时就拿到过网易雷火好几个顶级项目组方向的offer,基本上流程和你说的一样。 但本质还是劝退互联网的游戏方向,本质上是代价更高,而且职业生涯容错率很低,方向比较窄。 代价是众所周知的严重加班,游戏大版本赶工基本上通宵无休,甚至国庆五一都没放假是常态。 职业生涯性价比低是因为游戏行业本质上就是赢家通吃,但你要跳槽只有腾讯网易等头部,要么就是米哈游莉莉丝库洛三七等少数中厂,然后就没了,公司是断崖的少 游戏开发相比互联网方向岗位非常非常少,比如网易整个雷火也才五六百人,里面十几个工作室,招人比例非常低,其他游戏公司也是一样。 而且方向也很窄,你做引擎开发就只能跳相关,你做游戏客户端也只能跳相关(游戏客户端都算吃香的,但市场hc也非常非常少,跳槽机会更少),基本上很难转回互联网 这里对比传统互联网,大厂多的都说不过来,而且容错率很大,你做搜索方向可以跳推荐,你做推荐方向可以跳广告,要求远没有游戏行业那么严,甚至你之前干测试都能跳槽研发方向
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务