关键点$_GET[t_sort]代表 URL GET 参数名字就是t_sortPHP 接收 URL 上?t_sortxxx这部分内容处理完直接塞进 input 的 value 属性里而另一个参数keywordphp运行htmlspecialchars($str)使用了 htmlspecialchars 转义双引号、尖括号全部被编码没法闭合直接放弃。2、为什么你会疑惑页面上看不到输入框页面上只有一个搜索框提交只携带 keyword 但是代码里额外写死读取 GET [t_sort]。这个参数不在表单可见控件里属于隐藏可控参数浏览器访问时直接在 URL 拼接传参不需要表单提交。3、做题通用思路以后遇到类似代码照这个流程逐行寻找$_GET[]/$_POST[]提取所有参数名 这里找到两个keyword、t_sort看每个变量输出前做了什么过滤keywordhtmlspecialchars → 基本不能利用t_sort只删除和保留双引号 → 存在属性注入漏洞看输出位置input value可控内容 typehidden不需要新建标签只用闭合 value追加事件属性。4、延伸实战中不知道源码怎么找这类隐藏参数如果没有源码不能直接看见t_sort渗透测试标准做法抓包观察表单提交参数常见模糊测试字典爆破参数名sort、t_sort、id、url、link、history……观察页面隐藏 form 里 hidden 输入框的 name 值html预览input namet_sort ...页面右键查看网页源代码就能看到 namet_sort猜测后端接收同名 GET 参数。5、回到 Payload 原理顺带复习payloadplaintext?t_sortonfocusalert(1) typetext autofocus拼接结果html预览input namet_sort value onfocusalert(1) typetext autofocus typehidden闭合原有 value新增 onfocus 事件typetext覆盖原 hidden否则隐藏输入框无法触发焦点事件一句话总结不是我 “猜要加 t_sort”是 PHP 源码明确写了$_GET[t_sort]后端只接收这个名字的参数。