You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stored XSS漏洞演示脚本未按预期执行的问题排查求助

问题原因
  1. 浏览器内置防护:现代浏览器会自动忽略通过innerHTML插入的<script>标签,不会执行其中的代码——这是专门针对XSS的安全限制,避免恶意脚本通过HTML注入直接运行。你插入的<script>标签只会被当作普通文本节点渲染,不会触发执行。
  2. eval无效:你输入的是完整的HTML标签字符串,而eval只能解析纯JavaScript代码,无法识别HTML结构,所以这条语句根本不会执行弹窗逻辑。
修复方案(有效演示Stored XSS)

Stored XSS的核心是未过滤的用户输入被渲染到页面时触发脚本,不用依赖<script>标签,换用带事件属性的HTML元素即可:

方式1:使用事件触发型注入(最贴近真实场景)

让用户输入以下内容提交:

<img src="x" onerror="alert('This is my malicious script!')">

当这段HTML通过innerHTML插入到页面后,浏览器加载不存在的图片时会触发onerror事件,自动执行弹窗代码,完美复现Stored XSS效果。

方式2:简化代码直接用eval(适合演示代码注入逻辑)

如果想通过eval演示,让用户输入纯JS代码而非HTML标签,比如:

alert('This is my malicious script!')

此时eval(comment)会直接执行这段代码,但这种场景更偏向代码注入,不是典型的Stored XSS。

优化后的完整演示代码

<!DOCTYPE html>
<html>
<head>
    <title>Stored XSS Vulnerability Example</title>
</head>
<body>
    <h1>Welcome to the Example Website!</h1>

    <form onsubmit="submitComment(event)">
        <input type="text" id="comment-input" placeholder="试试输入: <img src=x onerror=alert('XSS')>">
        <button type="submit">Submit</button>
    </form>

    <div id="comments"></div>

    <script>
        function submitComment(event) {
            event.preventDefault();
            const comment = document.getElementById("comment-input").value;
            const commentElement = document.createElement("p");
            // 直接插入未过滤的用户输入,模拟存储后渲染的场景
            commentElement.innerHTML = comment;
            document.getElementById("comments").appendChild(commentElement);
        }
    </script>
</body>
</html>

这个版本去掉了无用的eval,专注于演示真实的Stored XSS流程:用户提交恶意内容→内容被“存储”(这里临时存在页面)→页面渲染时触发脚本执行。

其他可用的XSS测试 payload

除了img onerror,还可以用这些:

  • <svg onload="alert('XSS')">
  • <div onclick="alert('XSS')">点击我</div>
  • <body onload="alert('XSS')">

内容的提问来源于stack exchange,提问作者RazzcoSolutions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:43:12