Skip to main content

05.XSS: 存在于 JS 代码中(字符串中 2)

此案例与前一个类似,但此处是变量值未经适当的处理,直接嵌入到网页中。攻击者可以通过在变量值中传入恶意的 JavaScript 代码,将恶意脚本注入到页面中,从而在用户的浏览器中执行。

示例代码:#

此处以 get 方式获取参数值,并赋值给 name,正好又在<script>标签内

<div>    Here are photo for U! <br>    <script>    const name = "";    console.info("Hello" + `${name}`);    </script></div>

攻击示例:#

尝试通过拼接来分割前后,从而执行想要的代码

<!-- 成功的拼接,注意末尾多了两个斜杠-->http://test.com/xss/js/in-str2?name=test"</script><script>alert("Hello Yakit")//<!--拼接后的代码--><div>Here are photo for U! <br>    <script>const name = "test"</script>    <script>alert("Hello Yakit") //";    console.info("Hello" + `${name}`);    </script></div>

在 HTML 中,//是 JavaScript 代码中的注释符号。HTML 本身并没有//这个特殊的符号含义,但在 HTML 的<script>标签中嵌入的 JavaScript 代码中,//用于表示单行注释。任何位于//之后的内容都会被视为注释,不会被 JavaScript 解释执行。

防御措施:#

此处的问题任是直接将用户的输入带入到代码中,造成恶意代码的执行,对于此类漏洞防御,具体措施如下:

  • 输入验证: 对用户输入进行验证,只接受符合特定格式和类型的数据。拒绝包含特殊字符或 HTML 标签的输入。
  • 输出编码: 在将用户输入显示在网页上之前,进行适当的输出编码,将特殊字符转换为对应的 HTML 实体,以防止恶意脚本的执行。

靶场演示: 视频#