本文针对大型语言模型(LLM)从自然语言提示生成代码时,提示工程如何影响生成软件安全性的问题展开实证研究。现有观点认为结构化、面向安全的提示可以促使模型生成更安全的代码,但作者指出,其影响不能仅通过检测到的弱点是否存在来衡量。为此,研究者使用424个安全敏感的Python任务,采用五种逐渐增加结构和安全指导的提示变体,分别驱动GPT-4o和LLaMA 3.1-8B生成解决方案,并利用Bandit和CodeQL两个静态分析工具,从生成合规性、安全弱点普遍性、严重程度及CWE分布等多个维度进行评估。实验结果显示:结构化提示显著降低了模型的拒绝输出率(例如,GPT-4o的无效输出从424次中的338次降至37-52次),从而使得大规模分析成为可能;然而,安全导向的提示优化并不能一致地减少总体弱点数量。对于GPT-4o,更强的提示主要导致风险重新分布:高严重性发现的比例从20.8%降至13.6%,而低严重性发现的比例从32%升至43.5%;LLaMA模型则表现出较弱且不一致的变化。研究还观察到安全驱动的语义漂移现象,即更严格的提示会静默地移除或重写原本明确要求的、不安全的构造。总体而言,提示结构改善了合规性,但并不能替代LLM辅助开发中稳健的安全控制。该研究揭示了提示工程对代码安全影响的细微之处,提示安全从业者不能依赖提示词来保证生成代码的安全性,而应结合其他安全措施。适合LLM安全研究人员、软件工程安全实践者以及依赖AI辅助编码的开发者阅读。
💡 推荐理由: 该研究揭示了安全提示词并非可靠的安全保障,提示结构只会重新分配风险而非降低整体弱点数量,对依赖LLM生成代码的团队具有重要警示作用,有助于避免过度信任提示词工程的安全效果。
🎯 建议动作: 研究跟进