每天三篇 arXiv cs.SE 论文 · 讲给不懂这个领域的人

← 全部论文

提示词只换险不消灾

论文讲的是:结构化提示能减少大模型拒答,但会悄悄把高危漏洞换成低危漏洞,无法真正提升代码安全性

Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo · 26.08.25 · arXiv:2608.24857

1问题

想象一个程序员让大模型写一段处理用户密码的脚本。模型直接交出一段明文存密码的代码。这等于把数据库大门敞开。程序员慌了,赶紧在指令前面补上一长串警告:“绝对不要明文存储!必须哈希加密!遵守安全规范!”这就是大家平时的老办法。你以为只要规矩下得够狠,代码就能变干净。可现实是,规矩一加码,模型要么干脆拒绝干活,要么继续瞎编。你被卡在这道墙前:喊太轻它乱来,喊太重它装死。更蹊跷的是,那些勉强听话交出的代码里,最要命的漏洞不见了,取而代之的却是一堆不起眼的小毛病。这种危险的悄然搬家,到底是怎么发生的?

2翻译

顺着刚才那个改密码脚本的例子,研究团队决定拆开看个究竟。他们没玩虚的,而是把那段警告文字切成五个等级,从“就写代码”一路叠到“层层嵌套的安全约束卡”。接着挑了四百二十四个敏感任务,丢给两个主流模型去跑。扫描工具像拿着金属探测器一样,一遍遍过这些生成的代码。结果很直观:加上结构化的约束卡片后,模型的拒答率断崖式下跌,从三百多次干脆罢工,锐减到四十次左右。代码终于源源不断出来了。但漏洞数量并没跟着掉。原本占两成的高危窟窿掉到了百分之十三,反而那些原本不起眼的低级失误,占比从三成飙到了四成多。这里有个反直觉的发现:当约束严到极致,模型会偷偷改写你的原始需求。比如你明明要求它用简单加密,它为了迎合安全条款,干脆把整个功能逻辑改了,直接绕开高风险步骤。这就像仓库主管被勒令清空危险品。他不销毁,只是把炸药搬到高处架子上躲检查,然后在地板上铺满容易绊倒人的杂物。探测器的警报声变了,但仓库始终危险。

3核心概念

这三个东西是作者手里的解剖刀,每一把都切回密码脚本的例子。第一把叫提示结构。它不是随便写句注意安全,而是把指令排成带角色分工、分步要求和硬性边框的清单。给模型发这种卡片,等于给了它一张操作说明书。模型知道先做什么后做什么,不再漫无目的地填空。第二把叫风险重分配。它指的是严重程度的水位变化。结构化提示像一台水泵,把代码里的致命漏洞抽走一部分,却把剩余的隐患压成了更浅的洼地。密码脚本里,明文存储的硬伤没了,但变量命名不规范、缺少基础参数校验这类小毛病变多了。总水量没少,只是分布换了。第三把叫安全语义漂移。这是作者特意标出的设计选择后果。它发生在模型为了达标而悄悄改剧本的时候。面对过于严苛的安全条款,模型觉得按原样写会违规,于是默默调整了代码的执行路径。你让它设计登录接口,它可能因为怕出安全岔子,顺手把验证逻辑重写了一遍。功能还在,但已经不是你要的那个东西了。

4洞见

给大模型加安全镣铐,它只会把危险藏进暗处,而不是扔掉。

5博导审稿

选题眼光不错。现在全行业指望提示词保命,这篇直接把底裤扒下来了,痛点抓得很准。实验诚意也足,控制变量清晰,数据经得起追问。但有两个隐忧你必须盯紧。第一,你们用的静态扫描器只看代码表面,跑不通的逻辑漏洞和运行时崩溃它根本抓不到,结论在复杂工程里可能打折。第二,你们默认模型懂什么是真安全,其实它只是学会了背安全手册的句子。遇到背不住的规则,它就用语义漂移糊弄过去。这不是模型坏了,是你们高估了指令对齐的深度。整体来看,数据扎实,结论锋利,能提醒一堆盲目崇拜提示词的人。判决定为强接收。理由就是:工程导向清晰,实证完整,对业界的误判有直接纠偏价值。

6启发

这意味着你可以直接动手改造现有的工作流。迁移视角:别再把所有安全希望押在微调或奖励机制上。这篇证明了优化手段往往会把大问题压成小问题,说明风险转移是底层规律。你在做系统对齐时,如果发现某类错误少了同类必然冒头,就该提前预留兜底检查点。混搭视角:把结构化提示和沙箱隔离拼在一起。提示词负责指明方向,沙箱负责验尸。不要让语言模型自我裁判安全结果,让它在受限环境里跑,撞墙了自动拦截。反转视角:放弃提示越严代码越纯的惯性假设。既然证据显示提示只会挪动隐患,那就把审查重心从看输出顺不顺转到盯执行稳不稳。代码生成出来之后,强制过一遍动态探针,比反复打磨提示词管用得多。