XSS攻击是什么?

要点: XSS是跨站脚本攻击、向目标网站插入恶意代码、大量用户访问网站时运行恶意脚本获取信息

答:

XSS是跨站脚本攻击(Cross Site Scripting),不写为CSS是为了避免和层叠样式表(Cascading Style Sheets)的缩写混淆,所以将跨站脚本攻击写为XSS。攻击者可以通过向Web页面里面插入script代码,当用户浏览这个页面时,就会运行被插入的script代码,达到攻击者的目的。XSS的危害一般是泄露用户的登录信息cookie,攻击者可以通过cookie绕过登录步骤直接进入站点。

XSS的分类分为反射型和存储型

反射型就是临时通过url访问网站,网站服务端将恶意代码从url中取出,拼接在HTML中返回给浏览器,用户就会执行恶意代码。

存储型就是将恶意代码以留言的形式保存在服务器数据库,任何访问网站的人都会受到攻击。

预防XSS攻击的方案基本是对数据进行严格的输出编码,比如HTML元素的编码,JavaScript编码,css编码,url编码等等。


XSS的危害:

  • 获取cookie:网站中的登录一般都是用cookie作为某个用户的身份证明,这是服务器端返回的一串字符。如果cookie被攻击者拿到,那么就可以绕过密码登录。当空间、论坛如果可以被插入script代码,那么进入空间或者论坛的人的账号就可以轻易被攻击者获取。
  • 恶意跳转:直接在页面中插入window.location.href进行跳转。

XSS的分类

  • 反射型XSS(非持久型XSS):通过URL参数直接注入
  • 存储型XSS(持久型XSS):存储到数据库后读取时注入 XSS的预防:
  • 浏览器的防御和“X-XSS-Protection”有关,默认值为1,即默认打开XSS防御,可以防御反射型的XSS,不过作用有限,只能防御注入到HTML的节点内容或属性的XSS,例如URL参数中包含script标签。不建议只依赖此防御手段。
  • 防御HTML节点内容,通过转义<为<以及>为>来实现防御HTML节点内容。
  • 预防HTML属性,通过转义"->&quto来实现防御,一般不转义空格,但是这要求属性必须带引号。
  • 预防JavaScript代码,通过将数据进行JSON序列化。
  • 防御富文本是比较复杂的工程,因为富文本可以包含HTML和script,这些难以预测与防御,建议是通过白名单的方式来过滤允许的HTML标签和标签的属性来进行防御,大概的实现方式是:
    • 将HTML代码段转成树级结构的数据 - 遍历树的每一个节点,过滤节点的类型和属性,或进行特殊处理
    • 处理完成后,将树级结构转化成HTML代码 - 开启浏览器XSS防御:Http Only cookie,禁止 JavaScript 读取某些敏感 Cookie,攻击者完成XSS注入后也无法窃取此 Cookie。

总结给大家一个实用面试题库

 1、前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

最新文章

  1. Undo/Redo for Qt Tree Model
  2. Mongodb Manual阅读笔记:MongoDB教程
  3. js(jquery)代码在页面上实时地显示时间
  4. STAR-H1208M集线器不支持同时挂载多个nfs
  5. C/C++相对论——C++中为什么要使用异常?
  6. Repeater导航菜单DataList产品展示
  7. 使用xshell使用删除出现乱码
  8. Spiral Matrix II
  9. New MVC World
  10. KKCapture 高清录像软
  11. Hadoop--Map/Reduce实现多表链接
  12. java 上传图片 打水印
  13. HTML5硕士学习笔记
  14. Activity 切换 动画
  15. 转载:Linux Used内存到底到哪里去了?
  16. java日期转换
  17. 201521123061 《Java程序设计》第五周学习总结
  18. tideways+xhgui搭建php 7的性能测试环境
  19. SDL 2.0 如何在 windows 上使用?
  20. Numpy 模块的应用

热门文章

  1. 【Java】线程池梳理
  2. (一)elasticsearch 编译和启动
  3. nodejs 升级后, vue+webpack 项目 node-sass 报错的解决方法
  4. 动力节点——day07
  5. 如何将WebAssembly优化到2MB?
  6. 文本纠错:提升OCR任务准确率的方法理解
  7. 使用 flexible.js + rem 制作苏宁移动端首页
  8. 线程基础知识09-JAVA的可见性和有序性问题
  9. 不像JVM的JVM
  10. Android面试-字节一面