cursor精准修复php漏洞需明确漏洞类型、位置、修复方式及安全边界,限定输出为最小代码变更。例如指定sql注入在第42行,须用pdo参数化查询绑定$_get['id']为param_int,保留周边逻辑且不加注释。

要让 Cursor 精准修复 PHP 漏洞,关键不是堆砌技术术语,而是清晰告诉它:漏洞在哪、为什么危险、该怎么修、不能改什么。Cursor 基于 LLM,对上下文敏感,模糊或笼统的 prompt 容易导致误修、引入新问题,甚至绕过安全逻辑。
明确指出漏洞类型和位置
不要只说“这个函数有安全问题”,要具体到:
• 漏洞类型(如:SQL 注入、XSS、反序列化、未校验文件上传)
• 触发点(如:$_GET['id'] 直接拼进 PDO 查询、htmlspecialchars() 缺失、unserialize() 处理用户输入)
• 所在文件与行号(如果 Cursor 已打开该文件,可省略路径,但需提行号)
✅ 示例:
“第 42 行:$sql = 'SELECT * FROM users WHERE id = ' . $_GET['id']; ——存在 SQL 注入,$_GET['id'] 未过滤也未参数化。”
指定修复方式和安全边界
光说“修复”不够。LLM 可能用不兼容的方式(比如强行加 intval() 但业务本应支持字符串 ID)。要说明:
• 必须使用的机制(如:PDO::prepare + execute、filter_var()、htmlspecialchars(ENT_QUOTES))
• 允许的输入范围(如:只接受正整数、允许字母数字加下划线)
• 不得删除/重写周边逻辑(如:不能动上面的权限检查、不能删掉日志记录)
✅ 示例:
“请改用 PDO 参数化查询,绑定 $_GET['id'] 为 PARAM_INT;保留原有 try/catch 和错误日志;不修改第 38–40 行的权限校验逻辑。”
要求输出严格限定为代码变更
避免 Cursor 自作主张加注释、改命名、调整缩进风格或补充文档——这些会干扰代码审查和 Git diff。明确要求:
• 只输出最小必要改动(diff 风格更佳)
• 不新增函数、不重构无关逻辑
• 若原代码有安全兜底(如已用 mysqli_real_escape_string),说明为何当前仍不安全,并给出更优解
✅ 示例:
“仅输出修复后的第 42 行及必要上下文(最多±2行),不要解释,不要加注释,不要改变缩进或空行风格。”
附带一个典型完整 prompt 示例
你是一名资深 PHP 安全工程师。请修复以下代码中的安全漏洞:
文件:user_profile.php,第 67 行:
$template = file_get_contents($_GET['theme'] . '.html');
问题:任意文件读取(路径遍历),$_GET['theme'] 未校验,可传入 ../../etc/passwd。
要求:
• 仅允许 theme 值为 'light'、'dark' 或 'blue',其余全部拒绝并 exit(0);
• 使用 in_array() 显式校验,不依赖黑名单;
• 修复后 $template 必须从 ./templates/ 目录下加载,路径拼接需用 DIRECTORY_SEPARATOR;
• 不修改第 65 行的 header() 调用,不添加新函数;
• 只输出第 67 行及前后各 1 行的修正后代码,无额外说明。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











