什么是跨站点脚本攻击(XSS)?应如何阻止他?

本贴最后更新于 2070 天前,其中的信息可能已经斗转星移

2019-03-22

回答

XSS 是指客户端代码注入,攻击者将带有恶意脚本的代码注入到合法的网站或 web 应用程序中。这通常发生在应用程序对用户的输入不进行验证时,这样恶意代码就会轻松的注入到动态的 HTML 内容中。

例如,一个评论系统如果没有对用户的输入进行验证或转义,那么该评论系统将面临风险。如果评论内容中包含未转义的 HTML,那么评论时就可以将 <script> 标签注入到网站中,当其他用户访问这个评论页面时就会执行该脚本以发起攻击。

  • 恶意的脚本有权限访问到通常用于存储会话令牌的 cookie。如果攻击者可以获取用户的会话 cookie,那么攻击者就可以冒充该用户。
  • 当页面中注入的恶意脚本执行时,就可以对该页面中的 DOM 进行任意操作。这样一来,攻击者不仅可以插入与网站相似的内容或操作,也可以窜改网站上原有的实际内容。
  • 该脚本还可以使用 AJAX 发送带有任意内容的 HTTP 请求到任意一台服务器上。

加分回答

  • 在客户端,可以使用 textContent 来代替 innerHTML 以阻止浏览器运行通过 HTML 解析器执行内部脚本得到的字符串。
  • 在服务器端,转义 HTML 标签可以阻止浏览器将用户的输入解析为真实的 HTML,这样也不会执行脚本。但如果你想真实的展现用户的输入,那就只能对会被注入的标签、标签属性进行过滤。

返回总目录

30 秒面试系列一

  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 8 关注
  • Security
    9 引用 • 15 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Vanessa
我们终此一生,就是要摆脱他人的期待,找到真正的自己。 昆明