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

JavaScript中减号(-)运算符的非数学用途及代码执行疑问

为什么URL参数会触发alert?

先看你的代码:

let jeff = (new URL(location).searchParams.get('jeff') || "No parameters.");
eval(`ma = "Ma name ${jeff}"`);
document.write(ma)

对应的URL解码后为:

basic.html?jeff="-alert(1)-"

拆解触发alert的全过程:

  • URL里的%22是双引号的URL编码,所以jeff变量实际拿到的值是"-alert(1)-"。
  • 模板字符串拼接后,eval要执行的代码变成了:
    ma = "Ma name "-alert(1)-""
    
  • 这段代码被拆成了三部分:"Ma name "(字符串)、-alert(1)-(可执行代码)、""(空字符串)。JS会优先执行中间的alert(1),这里的减号只是对alert返回值(undefined)做取负运算,不影响alert先触发。
  • eval会把整段内容当作JS代码执行,所以alert(1)会被调用弹出窗口。

本质问题不是减号的非数学用途,而是你用eval执行了拼接用户可控内容的字符串,用户传入的双引号直接闭合了原有字符串的引号,把恶意代码变成了可执行部分——这是典型的代码注入漏洞,绝对不要用eval处理用户输入的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:39