一、什么是 XSS 攻击?

XSS(Cross Site Scripting)跨站脚本攻击:是指攻击者在网页中注入恶意脚本代码(通常是 JavaScript),当用户浏览该网页时,脚本会在用户的浏览器中执行,造成信息泄露、会话劫持、伪造操作等安全问题。

常见危害

  • 窃取 Cookie:如盗取用户身份令牌,冒充用户身份。
  • 钓鱼欺骗:伪造页面骗取用户敏感信息。
  • 强制操作:如自动发帖、点赞、转账等。
  • 传播蠕虫:自动传播恶意代码到其他用户(萨米_(计算机蠕虫))。

二、XSS 攻击类型

1. 存储型(Stored XSS)

攻击者将恶意脚本“存储”在服务器端(如数据库、评论区),其他用户访问时就会触发。

示例:评论区输入 <script>alert('xss')</script>,其他用户浏览页面时弹窗。

2. 反射型(Reflected XSS)

攻击代码不是存储在服务器,而是通过 URL 参数等方式“反射”到页面,用户访问恶意链接时触发。

示例:访问 http://example.com/?name=<script>alert('xss')</script>,页面直接输出 name 参数内容。

3. DOM 型(DOM-based XSS)

攻击代码通过前端 JavaScript 操作 DOM 时插入,比如用 document.writeinnerHTML 等不安全方式插入用户输入。


三、XSS 防御方法

1. 输入校验与过滤

  • 对所有用户输入进行白名单校验,拒绝非法字符。
  • 过滤特殊字符:如 < > " ' & / 等。

2. 输出编码(最重要!)

  • HTML 输出:将用户输入通过转义后再输出到页面。如 < 转为 &lt;> 转为 &gt;
  • 前端使用 textContentinnerText,而不是 innerHTML

常用函数/库

  • 后端:PHP 的 htmlspecialchars(),Python 的 html.escape(),Java 的 StringEscapeUtils.escapeHtml4(),Nodejs 的 xss()
  • 前端:推荐自己实现或用成熟库(如 DOMPurify,js-xss,he)

3. 使用安全的 API

  • 不要直接用 evaldocument.writeinnerHTML 等插入用户内容。
  • 推荐用安全 DOM API:createElementappendChildtextContent

4. 设置安全 HTTP 头

  • Content Security Policy (CSP),强制脚本来源:
    Content-Security-Policy: default-src 'self';
  • X-XSS-Protection(兼容旧浏览器):
    X-XSS-Protection: 1; mode=block

5. Cookie 安全

  • 设置 HttpOnly,防止 JS 读取 Cookie。
  • 设置 Secure,仅允许 HTTPS 发送 Cookie。

6. 模板引擎选择

  • 选用自动转义的模板引擎(如 doT.js、ejs、FreeMarker、Django 等)。

7. 定期更新依赖

  • 框架和第三方库要及时升级,修复已知 XSS 漏洞。

四、实际代码示例

1. 后端过滤与转义(Node ejs 示例)

ejs.render("<div><%- user_input %></div>");
# 类似 encodeURIComponent(user_input)

2. 前端防御(避免直接使用 innerHTML 或者 v-html)

<div id="output"></div>
<script>
const userInput = '<script>alert("xss")</script>';
document.getElementById('output').textContent = userInput; // 安全
</script>
<template>
<div id="output">{{ userInput }}</div>
</template>
<script>
const userInput = '<script>alert("xss")</script>';
</script>

3. CSP 头部设置(Nginx 示例)

add_header Content-Security-Policy "default-src 'self'; script-src 'self'";

五、总结

  • XSS 是网页安全最常见的攻击之一。
  • 防御重点是:所有用户输入都必须经过 输出编码,而不仅仅是输入校验。
  • 使用安全 API,设置 CSP,选择安全模板引擎,及时升级依赖,可以显著降低 XSS 风险。

XSS 攻击与防御的更多相关文章

  1. web安全-XSS攻击及防御

    XSS攻击的原理 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻 ...

  2. XSS攻击的防御

    XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS,全称 Cross SiteScript,跨站脚本攻击,是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略 ...

  3. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

  4. XSS攻击及防御

    XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有XSS漏洞的网站中输入 ...

  5. XSS攻击及防御(转)

    add by zhj: 略有修改.另外还有一篇文章值得参考,使用 PHP 构建的 Web 应用如何避免 XSS 攻击,总得来说防御XSS的方法是客户端和服务端都 要对输入做检查,如果只有客户端做检查, ...

  6. xss攻击与防御

    一.XSS攻击 Cross Site Scripting跨站脚本攻击 利用js和DOM攻击. 盗用cookie,获取敏感信息 破坏正常页面结构,插入恶意内容(广告..) 劫持前端逻辑 DDos攻击效果 ...

  7. Web 安全之 XSS 攻击与防御

    前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...

  8. 转---如何让前端更安全?——XSS攻击和防御详解

    前言 平时很少关注安全这块的技术,曾经也买过一本<Web前端黑客技术揭秘>但至今还没翻过,尴尬.今天的早读文章由腾讯优测@小吉带来的分享. 正文从这开始~ 最近深入了解了一下XSS攻击.以 ...

  9. Web 攻击之 XSS 攻击及防御策略

    XSS 攻击 介绍 XSS 攻击,从最初 netscap 推出 javascript 时,就已经察觉到了危险. 我们常常需要面临跨域的解决方案,其实同源策略是保护我们的网站.糟糕的跨域会带来危险,虽然 ...

  10. XSS 攻击实验 & 防御方案

    XSS 攻击&防御实验 不要觉得你的网站很安全,实际上每个网站或多或少都存在漏洞,其中xss/csrf是最常见的漏洞,也是最容易被开发者忽略的漏洞,一不小心就要被黑 下面以一个用户列表页面来演 ...

随机推荐

  1. Windows下python环境安装与管理

    Python功能强大,适合多种应用场景.安装合适的python环境是开发的第一步.下面是Windows环境下Python环境的安装与管理实战方法. 一.在线环境安装 如果需要安装的环境可以连接互联网, ...

  2. vue v-show 失效

    简介 RT 解决方案 采用 直接 操控dom赋值属性的方式

  3. “造芯”之 Proprietary闭源 与 Open Source开源(RISC-V) 对比

    一.造芯的RISC-V(Open Source) 与 Proprietary 历史鉴证: 共和的Top-Down 与 Bottom-Up的民主 是统一的. Open Source开源 与 Propri ...

  4. MacOS-“System Information”这个App用做USB设备的检测与设备文件的确定

    "System Information"这个Apple自带的GUI小App是检测USB硬件的; 如图所示: 而Linux上是 lsusb 与 lspci 这类command lin ...

  5. BIgdataAIML-IBM-A neural networks deep dive - An introduction to neural networks and their programming

    https://developer.ibm.com/articles/cc-cognitive-neural-networks-deep-dive/ By M. Tim Jones, Publishe ...

  6. tauri学习(1)-初体验

    tauri是一个类似Electron的框架,允许前端程序员来开发桌面应用程序,外层的壳采用Rust语言开发,相比Electron生成的可执行程序更小,今天尝试了下,感觉还不错,按官网的教程只需执行下的 ...

  7. Windows关闭自动更新

    方法1:修改注册表编辑器 文字流程 Win+R 输入 regedit 输入路径 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Uso ...

  8. 20212109 实验二《Python程序设计》实验报告

    实验二 计算器设计 # 20212109 2021-2022-2 <Python程序设计>实验二报告课程:<Python程序设计>班级: 2121姓名: 施铖哲学号:20212 ...

  9. win10系统用蓝牙键盘连接无法使用的问题

    有电脑系统用户说他的电脑win10系统用蓝牙键盘,显示已连接蓝牙,但是键盘就是无法使用该怎么办?电脑想使用无线键盘,多以买了蓝牙键盘,可以,连接以后却发现不能用,我的是win10系统,该怎么办呢?下面 ...

  10. Spring的@Import注解简单介绍

    目录 Spring的@Import注解 作用 示例 1. 将普通Class加入到Spring容器 普通class 2. @Import Java Config 3. 实现了ImportSelector ...