沭阳城乡建设局网站,青岛做网站哪个最好,怎么看网站做的外链,微信商城怎么开商城合规免责声明
本文仅用于网络安全技术学习与研究#xff0c;所有操作均在本地搭建的 DVWA 靶场环境中完成。XSS 攻击属于网络违法犯罪行为#xff0c;未经授权对他人系统实施攻击将承担相应的法律责任。请遵守《网络安全法》等相关法律法规#xff0c;切勿将本文技术用于非…合规免责声明本文仅用于网络安全技术学习与研究所有操作均在本地搭建的 DVWA 靶场环境中完成。XSS 攻击属于网络违法犯罪行为未经授权对他人系统实施攻击将承担相应的法律责任。请遵守《网络安全法》等相关法律法规切勿将本文技术用于非法用途本文作者及发布平台不对任何非法使用行为负责。核心认知XSS 攻击核心定义XSSCross-Site Scripting跨站脚本攻击是一种常见的 Web 安全漏洞攻击者通过在 Web 页面中注入恶意 JavaScript 代码当用户访问该页面时恶意代码会在用户浏览器中执行从而实现窃取 Cookie、劫持会话、伪造页面、钓鱼等恶意操作。其本质是Web 应用对用户输入的过滤不严格导致恶意脚本被当作合法内容渲染或执行。学习流程零基础入门环境搭建本地部署 DVWA 靶场PHPMySQLApache 架构确保靶场级别可切换至 “Low/Medium”不会的可查看这篇文章DVWA 靶场搭建Windows11phpstudy 搭建步骤 截图 常见问题-CSDN博客原理理解掌握 3 种 XSS 类型的核心差异数据存储 / 传输方式、执行触发条件靶场实操针对每种 XSS 类型复现 Low 级别攻击分析 Payload 生效原因代码审计拆解 DVWA 源码定位防护逻辑缺陷基础防御总结入门级防御手段理解 “输入过滤、输出编码” 的核心思想。思维导图文字版3 种 XSS 原理拆解附攻击链路图1. 反射型 XSS非持久型 XSS核心原理反射型 XSS 是最常见的 XSS 类型恶意脚本通过 URL 参数、表单提交等方式传递给 Web 服务器服务器未对输入做有效过滤直接将恶意脚本 “反射” 回用户浏览器脚本仅在当前请求中执行无持久化存储。攻击链路图关键特征一次性攻击刷新页面后脚本失效依赖用户点击恶意链接攻击范围有限数据不经过数据库存储仅在 HTTP 请求 / 响应中传递。2. 存储型 XSS持久型 XSS核心原理存储型 XSS 是危害最大的 XSS 类型攻击者将恶意脚本提交至 Web 应用的数据库如留言板、评论区、用户资料当其他用户访问包含该脚本的页面时服务器从数据库中读取恶意脚本并返回给用户浏览器脚本在所有访问该页面的用户端执行。攻击链路图关键特征持久化攻击脚本永久存储在数据库中无需诱导用户点击链接只要访问受影响页面即触发攻击范围广可影响所有访问该页面的用户。3. DOM 型 XSS核心原理DOM 型 XSS 与前两种类型不同其攻击发生在前端 DOM文档对象模型操作中无需后端服务器参与。攻击者构造恶意输入前端 JavaScript 在处理 URL 参数、表单值等数据时未对输入做过滤直接将数据插入 DOM 树中导致恶意脚本执行。攻击链路图关键特征纯前端攻击后端服务器无感知响应包中无恶意脚本依赖前端 DOM 操作的漏洞如document.write、innerHTML等危险方法脚本执行时机为前端 DOM 渲染阶段。DVWA 靶场实战Low级别环境准备本地部署 DVWA登录 DVWA默认账号admin密码password将靶场级别切换为 “Low”通过左侧 “DVWA Security” 设置工具准备Chrome/Firefox 开发者工具审查元素、控制台、Burp Suite 基础版抓包分析。1. 反射型 XSSLow级别操作步骤进入 DVWA “XSS Reflected” 模块反射型 XSS 页面在输入框中输入测试 Payloadscriptalert(XSS)/script点击 “Submit” 按钮页面弹出警告框说明 XSS 攻击成功。Payload 说明核心 Payloadscriptalert(XSS)/script最基础的 JavaScript 弹窗脚本生效原因Low 级别下DVWA 未对输入做任何过滤输入的script标签直接被渲染到 HTML 页面中浏览器解析时执行其中的 JS 代码。代码审计打开 DVWA 源码目录下的vulnerabilities/xss_r/source/low.php核心代码如下?php header (X-XSS-Protection: 0); // Is there any input? if( array_key_exists( name, $_GET ) $_GET[ name ] ! NULL ) { // Feedback for end user $html . preHello . $_GET[ name ] . /pre; } ?缺陷分析代码直接获取$_GET[name]参数未做任何过滤如过滤script标签、转义特殊字符直接通过echo输出到 HTML 中导致输入的恶意脚本被执行。详情如下?php // 核心风险1禁用浏览器内置的XSS防护机制 // X-XSS-Protection: 0 会关闭Chrome、IE等浏览器的内置XSS过滤器 // 即使浏览器检测到潜在XSS攻击也不会拦截相当于主动移除了一层基础防护 header (X-XSS-Protection: 0); // Is there any input? // 检查GET请求中是否存在name参数且参数值非空 if( array_key_exists( name, $_GET ) $_GET[ name ] ! NULL ) { // Feedback for end user // 核心风险2用户输入未过滤、未编码直接拼接至HTML输出 // 1. $_GET[name] 是用户可控的输入攻击者可构造任意内容如scriptalert(xss)/script // 2. 直接将用户输入拼接到pre标签内浏览器解析HTML时会执行注入的脚本标签/事件 // 3. 无任何转义如htmlspecialchars或过滤操作属于典型的反射型XSS漏洞 $html . preHello . $_GET[ name ] . /pre; }2. 存储型 XSSLow级别操作步骤进入 DVWA “XSS Stored” 模块存储型 XSS 页面在 “Name” 输入框输入test在 “Message” 输入框输入 Payloadscriptalert(XSS)/script点击 “Sign Guestbook” 按钮页面立即弹出警告框且刷新页面后弹窗仍会出现脚本已存入数据库新建浏览器窗口登录 DVWA或者刷新原页面访问该页面仍会触发弹窗验证持久化特征。Payload说明核心 Payloadscriptalert(XSS)/script生效原因Low 级别下应用未对留言内容做任何过滤直接将内容存入数据库每次加载留言板页面时从数据库读取脚本并输出到 HTML 中所有访问者均会触发。代码审计打开vulnerabilities/xss_s/source/low.php核心代码如下?php if( isset( $_POST[ btnSign ] ) ) { // Get input $message trim( $_POST[ mtxMessage ] ); $name trim( $_POST[ txtName ] ); // Sanitize message input $message stripslashes( $message ); $message ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $message ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : )); // Sanitize name input $name ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $name ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : )); // Update database $query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );; $result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre ); //mysql_close(); } ?缺陷分析仅对输入做了mysql_real_escape_string处理防止 SQL 注入无任何 XSS 相关过滤从数据库读取数据后直接输出到 HTML 页面恶意脚本被渲染执行无输出编码如htmlspecialchars无法将特殊字符//转为 HTML 实体。?php if( isset( $_POST[ btnSign ] ) ) { // Get input // 仅做了首尾空格去除未对XSS相关特殊字符做任何过滤/编码 $message trim( $_POST[ mtxMessage ] ); // 接收用户提交的评论内容核心用户输入点 $name trim( $_POST[ txtName ] ); // 接收用户提交的姓名次要用户输入点 // Sanitize message input $message stripslashes( $message ); // 仅去除反斜杠对XSS无防护作用 // 核心误区1仅做MySQL防注入处理未做XSS防护 // mysqli_real_escape_string的作用是转义SQL语句中的特殊字符如单引号、双引号 // 仅能防止SQL注入无法过滤/转义HTML特殊字符如、、script标签对XSS无效 $message ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $message ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : )); // Sanitize name input // 同理仅防SQL注入不防XSS $name ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $name ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : )); // Update database // 核心风险2未过滤的用户输入被存入数据库存储型XSS关键环节 // 攻击者注入的script等恶意代码会被持久化存储到guestbook表中 // 所有访问该评论页面的用户都会加载此恶意代码 $query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );; $result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre ); //mysql_close(); // 核心风险3代码仅处理“存入数据库”环节未考虑“从数据库读取输出”环节的编码 // 即使存入时未过滤若读取输出时对内容做HTML编码也可防御XSS但此代码无任何输出编码逻辑 // 当页面从数据库读取comment/name并渲染时恶意脚本会直接被浏览器执行 } ?3. DOM 型 XSSLow级别操作步骤进入 DVWA “XSS DOM” 模块DOM 型 XSS 页面页面显示 “Please choose a language:”下方有一个输入框和 “Select” 按钮URL 为http://localhost/dvwa/vulnerabilities/xss_d/?defaultEnglish修改 URL 中的default参数为 Payloadhttp://localhost/dvwa/vulnerabilities/xss_d/?default%3Cscript%3Ealert(document.cookie)%3C/script%3E回车访问该 URL页面弹出警告框XSS 攻击成功打开开发者工具F12查看 Elements 面板发现option value%3Cscript%3Ealert(document.cookie)%3C/script%3Escriptalert(document.cookie)/script/option恶意脚本已插入 DOM 中。Payload说明核心 Payloadscriptalert(document.cookie)/script生效原因Low 级别下前端 JS 直接读取 URL 中的name参数未做任何过滤将其插入 DOM 树中浏览器解析 DOM 时执行脚本。代码审计打开在xss_dom型的漏洞页面点击鼠标右键查看源代码这个漏洞在前端的后端没有代码!DOCTYPE html html langen-GB head meta http-equivContent-Type contenttext/html; charsetUTF-8 / titleVulnerability: DOM Based Cross Site Scripting (XSS) :: Damn Vulnerable Web Application (DVWA)/title link relstylesheet typetext/css href../../dvwa/css/main.css / link relicon type\image/ico href../../favicon.ico / script typetext/javascript src../../dvwa/js/dvwaPage.js/script /head body classhome div idcontainer !-- 省略导航/布局代码无漏洞无需分析 -- div idmain_body div classbody_padded h1Vulnerability: DOM Based Cross Site Scripting (XSS)/h1 div classvulnerable_code_area pPlease choose a language:/p form nameXSS methodGET select namedefault script // 漏洞触发条件URL中包含default参数攻击者可任意构造 if (document.location.href.indexOf(default) 0) { // 风险1未过滤读取URL参数 // 从URL中截取default后的所有内容攻击者可传入任意字符如script // 例URL为?defaultscriptalert(1)/script则lang的值就是scriptalert(1)/script var lang document.location.href.substring(document.location.href.indexOf(default)8); // 风险2document.write直接拼接未过滤参数到HTML核心XSS漏洞 // 1. value lang 若lang包含单引号如 onmouseoveralert(1) 会闭合option标签的value属性注入事件 // 2. decodeURI(lang)解码URL编码的字符如%3C转为进一步放大攻击面 // 3. 无任何HTML编码如转义、、恶意代码直接被浏览器解析执行 document.write(option value lang decodeURI(lang) /option); document.write(option value disableddisabled----/option); } // 以下是正常语言选项无风险 document.write(option valueEnglishEnglish/option); document.write(option valueFrenchFrench/option); document.write(option valueSpanishSpanish/option); document.write(option valueGermanGerman/option); /script /select input typesubmit valueSelect / /form /div !-- 省略更多信息链接无漏洞 -- /div /div !-- 省略底部布局代码无漏洞 -- /div /body /html缺陷分析漏洞关键特征DOM 型 XSS 专属全程无后端参与恶意脚本未经过后端 PHP 处理仅由前端 JS 读取并执行后端仅返回静态 HTML 框架双重风险放大decodeURI(lang)会解码攻击者的 URL 编码 payload如%3Cscript%3Ealert(1)%3C/script%3E让攻击更隐蔽多攻击方式除了script标签还可通过闭合option标签注入事件如default onchangealert(1) 攻击触发流程攻击者构造 URLhttp://localhost/dvwa/vulnerabilities/xss_d/?defaultscriptalert(document.cookie)/script受害者点击 URL 后浏览器加载页面前端 JS 读取 URL 中的default参数恶意脚本JS 通过document.write将恶意脚本直接插入select标签内浏览器解析 HTML 时执行脚本攻击者窃取 Cookie / 控制会话基础级防御思路1. 输入验证前端 后端双重验证白名单验证仅允许符合预期的字符如字母、数字、指定符号拒绝特殊字符///()长度限制限制输入内容的长度防止超长恶意脚本注入示例PHP// 仅允许字母、数字、下划线长度1-20 $name $_GET[name]; if(!preg_match(/^[a-zA-Z0-9_]{1,20}$/, $name)) { die(输入格式错误); }2. 输出编码核心防御手段将输出到 HTML 中的特殊字符转为 HTML 实体如→lt;→gt;→quot;使浏览器将其视为文本而非标签示例PHP使用htmlspecialchars函数编码输出$name $_GET[name]; // ENT_QUOTES同时转义单引号和双引号 echo preHello . htmlspecialchars($name, ENT_QUOTES) . /pre;前端防御使用textContent替代innerHTML插入文本textContent仅渲染文本不解析 HTMLvar name document.location.href.match(/name([^])/)[1]; document.getElementById(greeter).textContent Hello name;3. 禁用危险标签 / 属性后端过滤常见的 XSS 危险标签script/img/iframe和危险属性onerror/onclick/onload注意仅过滤无法完全防御需配合输出编码使用。4. 基础 CSP内容安全策略通过 HTTP 响应头Content-Security-Policy限制脚本执行来源禁止内联脚本、eval 函数等示例Apache 配置Header set Content-Security-Policy default-src self; script-src self;效果仅允许加载同域的脚本禁止内联script标签和eval执行大幅降低 XSS 风险。补充说明基础防御手段的局限性需要明确的是上述基础防御思路仅能抵御初级 XSS 攻击针对中级 / 高级绕过手段如 Unicode 编码、HTML 实体混淆、事件属性变形等仍存在不足这也是后续付费专栏将深入讲解的核心内容。例如htmlspecialchars仅能转义基础特殊字符若攻击者将脚本编码为 Unicode如#x3c;script#x3e;alert(1)#x3c;/script#x3e;未做解码处理的场景下仍可能触发 XSSCSP 基础配置仅限制同域脚本若网站存在第三方脚本引入漏洞攻击者可劫持第三方域名执行恶意脚本仅过滤危险标签 / 属性易被绕过如scrscriptipt嵌套标签、onerror变形为onerrοr插入不可见字符。