实验证明 AI 可以检测真实漏洞,但也会基于模式捏造漏洞(如不存在的 SQL 注入),开发者需建立独立验证机制。
和许多开发者一样,我现在几乎每天都在使用 AI。
需要理解某个报错?问 AI。
需要快速编写一个 API?找 AI。
“AI 能帮我审查代码中的安全问题吗?”
于是,我把自己的一个小项目交给它,让它找出潜在的漏洞。
结果很有意思。
公平地说,AI 并非毫无用处。
它指出了一些确实需要关注的问题:
作为第一次审查,这其实已经相当令人印象深刻了。
感觉就像让另一位开发者快速浏览了一遍整个项目。
这才是令人意外的部分。
AI 非常自信地告诉我,某段代码存在 SQL 注入漏洞。
可这个项目里甚至根本没有使用数据库。
还有一次,它警告我存在身份认证问题……
……但它指出的文件与身份认证完全没有任何关系。
那些解释听起来很有说服力。
然而,当我真正检查代码时,却发现所谓的“问题”根本不存在。
就在那时,我意识到了一件重要的事。
AI 并不是真的在审查你的应用。
它只是在根据自己见过的模式,预测这里可能会出现哪些安全问题。
有时,这种能力非常有用。
有时,它会自信满满地给出错误答案。
人类审查者会提出这样的问题:
AI 并不总是拥有这些上下文。
它只知道你展示给它的内容。
这是一个巨大的局限。
这是最让我惊讶的地方。
我故意在一条 route 中留下了一个小小的授权错误。
只是缺少了一项权限检查。
AI 完全没有提到它。
如果是人类开发者查看这个项目,很可能会问:
“等等……这个 endpoint 难道不应该要求身份认证吗?”
这提醒了我:安全并不只是找出看起来可疑的代码。
更重要的是理解整个应用的运行方式。
事实上,我认为 AI 是开发者能够拥有的最佳生产力工具之一。
它可以:
但我已经不再期待它取代真正的安全审查。
现在,我会向 AI 提出范围小得多的问题:
“你能只审查身份认证逻辑吗?”
“你在这里看到了任何输入验证问题吗?”
“这个 endpoint 是否可能暴露敏感信息?”
“这条 SQL 查询安全吗?”
“这种 API 设计是否会引发安全问题?”
这样得到的答案有用得多。
AI 就像一位速度极快、坐在你身边的初级开发者。
有时,它能发现你完全遗漏的问题。
有时,它也会自信满满地提出一些毫无道理的建议。
你的工作不是盲目接受它给出的每一条建议。
你的工作是理解它为什么会提出这样的建议。
这仍然是人类经验发挥价值的地方。
我认为 AI 短期内不会取代安全编码。
恰恰相反,它让开发者承担了更多责任。
因为现在,我们不仅要审查自己编写的代码。
还必须审查 AI 帮助我们编写的代码。
我认为,这是每一位开发者现在都应该开始练习的技能。
你是否曾让 AI 审查过自己的代码?
它发现了真正的问题,还是自信地编造了一个问题?
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。