← 最新论文
💻 computer science

Prompt Structure Redistributes, Not Reduces: An Empirical Analysis of Security-Weaknesses in LLM-Generated Python Code

这项实证研究表明,虽然结构化的、面向安全性的提示词显著提高了大语言模型的合规性并减少了无效输出,但它们未能一致地降低生成的 Python 代码中整体安全弱点的流行率,而是往往通过将高严重性漏洞转移为低严重性漏洞,以及诱发会悄然改变所请求功能的语义漂移,从而实现了风险的重新分配。

原作者: Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo

发布于 2026-08-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

在现代软件创作的版图中,一种新型的助手已经出现:大语言模型。这些是经过海量文本训练的强大计算机程序,能够在接收到自然语言指令时编写计算机代码。开发者利用它们来加速工作,只需输入任务描述,即可获得一段代码块。然而,正如人类作者如果没有仔细引导可能会无意中包含危险的想法一样,这些机器也可能生成带有隐藏安全缺陷的代码。为了防止这种情况,工程师们使用了一种称为“提示工程”(prompt engineering)的技术,即通过精心设计特定的指令,来引导模型产生更安全的结果。人们普遍寄希望于,只要简单地要求模型更加谨慎,或者为它的响应提供一个结构化的模板,我们就能显著减少其生成的软件中的安全漏洞。

一个研究小组着手测试这种希望是否得到了充分证实。他们专注于一个关键问题:增加指令中的结构和安全警告,究竟是让代码变得更安全了,还是仅仅改变了代码的外观?为了寻找答案,他们进行了一项大规模实验,使用了两种不同的人工智能模型:一个来自主要的科技公司,另一个是开源可用的。他们要求这些模型解决 424 个已知容易产生安全风险的特定编程任务,例如处理文件或管理用户数据。对于每个任务,他们尝试了五个不同版本的指令,范围从简单的请求到包含严格安全标准规则及针对恶意输入的警告的高度详细的提示。

研究人员首先观察了模型是否会尝试编写代码。当仅给出简单的、非结构化的请求时,那款更先进的模型拒绝为大多数安全敏感型任务生成代码,通常是以礼貌的拒绝来代替解决方案。然而,一旦研究人员添加了一个清晰定义了软件工程师角色并明确规定了输出形式的结构化模板,拒绝率便大幅下降。该模型开始为几乎所有的任务生成有效的代码。这一初步成功表明,结构化指令非常擅长让机器完成工作,但研究人员需要知道它生成的代码是否真的安全。

当他们分析生成的有效代码时,结果揭示了一个更为复杂的现实。研究人员使用了专门的扫描工具来识别安全弱点,并按其危险程度进行分类。他们发现,虽然更详细、更注重安全的提示确实减少了最严重的缺陷,但并未消除问题。相反,缺陷的性质发生了变化。指令似乎促使模型避开了最明显且最危险的错误,但在这样做时,它往往用较轻微但仍然存在的问题取代了原有的错误。对于那款先进的模型而言,高风险错误的比例显著下降,但低风险错误的比例却上升了。这就像是指令并没有清扫房间,而只是把灰尘从房间中央移到了角落里。

或许最令人惊讶的发现是研究人员称之为“语义漂移”(semantic drift)的现象。在许多情况下,当指令对安全性要求变得更加严格时,模型会在满足安全规则的同时,悄无声息地改变了解决问题的方式,即便原始任务要求采用某种特定的、可能具有风险的方法。例如,如果一个任务要求模型使用某种特定方法来运行系统命令,一个严格的安全提示可能会导致模型将该方法替换为一种更安全的方法,这种方法虽然在技术上解决了问题,但违反了特定的要求。在使用了最激进的安全指令时,这种现象在先进模型中约占三分之二的任务,而开源模型表现出的此类变化率则要低得多。代码在扫描工具看来更安全了,但它不再完全符合开发者的初衷。

这项研究还强调了这些效应在不同模型之间并不相同。虽然先进模型在处理风险的方式上表现出了明显的转变,但开源模型的反应则不太一致,其安全缺陷无论指令如何表述都保持得相对稳定。此外,研究人员指出,他们使用的扫描工具虽然能有效捕捉常见模式,但无法检测到所有可能的危险。某些风险取决于代码在运行时是如何表现的,或者取决于其使用的具体上下文,而这些正是静态扫描工具经常遗漏的领域。这意味着发现的缺陷数量很可能是一个保守的估计,真实的风险可能更高。

最终,研究表明,虽然编写更好的指令是让人工智能生成代码的有力工具,但它并不是解决安全问题的完整方案。结构化提示更像是一个过滤器,改变了风险的分布,而不是一个能移除风险的盾牌。它们在确保机器遵循规则并产生输出方面非常有效,并且可以降低最严重错误的严重程度。然而,它们既不能保证代码没有漏洞,也不能保证代码仍然忠实于开发者的原始意图。研究结果表明,仅仅依靠如何组织请求的措辞是不够的;稳健的安全保障仍然需要人工审查以及在初始提示之外的其他保护层。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →