HackerTube English?
程序的表达能力 →

输入从哪一步变成了指令?

拼错的表达式有时恰好合法;看似只装数据的格式也可能执行计算。顺着输入往里走,找出究竟是谁决定它的含义。

本文的问题 · 10
  1. 语法功能相互作用会让笔误变成合法程序
  2. 遇到无效输入,应当纠正还是拒绝?
  3. 意外的通用计算能力也可能成为攻击面
  4. 不可信输入进入处理路径前,边界应在哪里
  5. 同一串符号,交给谁来解释?
  6. 读出一个列表,和允许它运行之间还有几步?
  7. 一幅画什么时候借出的是读音?
  8. 同一句话,是文字输入还是编辑命令?
  9. 同一个文件里,哪些内容要由播放器执行?
  10. 模型读到一封邮件,邮件就能决定工具怎么用吗?

语法功能相互作用会让笔误变成合法程序

Crockford展示return换行被分号插入、块与标签语法组合掩盖;Hettinger担心类型标注和数字分隔符等新增语法让原本报错的笔误变成有效程序。连接在错误可检测性,而非泛泛反对语言增长。

对照原文与时间戳 · 2
all these things tend to work together to mask errors.
JavaScript: The Good Parts · ▶ 33:55–34:22
features that individually seem to make sense but brought together might be terrible
Modern Dictionaries by Raymond Hettinger · ▶ 63:47–64:01

两段属于各自演讲时期的语法案例;不推出新增语法整体有害或现代版本仍有同样全部限制。

遇到无效输入,应当纠正还是拒绝?

信道纠错把接近合法码字的受扰数据解码为合法邻居;协议安全要求完整识别输入后再交给处理逻辑。两端都界定了合法消息,决定如何处理偏离时,需要先问面对的是随机误码还是主动构造的输入。

对照原文与时间戳 · 2
correcting what they see back to the nearest valid neighbor
But what are Hamming codes? The origin of error correction · ▶ 3:28–3:37
if you haven't recognized it don't goddamn process it
28c3: The Science of Insecurity · ▶ 25:04–25:15

纠错半径内的恢复不提供身份验证或攻击防护;语法识别也无法代替信道纠错。两种操作可在不同层组合。

意外的通用计算能力也可能成为攻击面

PowerPoint展示原本用于展示的动画构造可以模拟任意转移函数;安全演讲则把输入处理的计算能力视为应受限的权限,解释为什么通信边界不应无意引入过强的执行能力。

对照原文与时间戳 · 2
essentially imitate any transition function of any other touring machine
On The Turing Completeness of PowerPoint (SIGBOVIK) · ▶ 4:07–4:17
treat input handling computational power as privilege and reduce that privilege
28c3: The Science of Insecurity · ▶ 34:49–34:59

前者是主动构造的演示,不是漏洞证据;后者限制的是协议边界而非反对所有通用计算。

不可信输入进入处理路径前,边界应在哪里

提示注入演示外部内容被误当成新指令;LangSec则展示在完整识别输入前交错执行处理逻辑,会产生攻击者可利用的状态转换。两者可作为输入边界设计的对照,不能据此推出相同攻击机制或相同修复办法。

对照原文与时间戳 · 2
prompt injection is about hijacking the large language model giving it what looks like new instructions
[1hr Talk] Intro to Large Language Models · ▶ 52:11–52:21
if you haven't recognized it don't goddamn process it
28c3: The Science of Insecurity · ▶ 25:04–25:15

自然语言提示注入不能简单用形式语法解析彻底解决;两者共享边界原则,攻击机制并不等价。

同一串符号,交给谁来解释?

在 Lisp 解释器里,把一个含有自由变量的过程交给别人,变量得回创建过程时的环境中找;只交出那几行字会漏掉一部分意思。连接式语言把两个表达式排在一起,则约定为函数组合。再看理论课中的正规表达式和有限自动机:写法很不一样,却能识别同一类字符串。判断一段输入能做什么,要说明解释规则和可用状态,单从它看起来像代码或图案很难下结论。

原文与时间戳 · 3
we have to capture that environment
Lecture 7A: Metacircular Evaluator, Part 1 · ▶ 13:35–13:38
the juxtaposition of expressions denotes function composition
Stanford Seminar - Concatenative Programming: From Ivory to Metal · ▶ 10:29–10:40
They are equivalent in power with respect to the class of languages they describe.
1. Introduction, Finite Automata, Regular Expressions · ▶ 42:16–42:23

读出一个列表,和允许它运行之间还有几步?

Lisp 的例子让「数据可以表示程序」这句话更具体。读入文本先得到有结构的形式;宏可以在后续阶段变换它,求值又是另一个动作。设计接收外部表达式的接口时,可以逐项标明谁只读结构,谁有权扩展形式,谁最终执行。某一层的 reader 被设计为无副作用,不能替后续所有解释动作作出同一保证。

原文与时间戳 · 2
code as data, and the resulting macro system and syntactic abstraction
Clojure for Lisp Programmers Part 1 - Rich Hickey · ▶ 2:24–3:09 · 段落范围
Clojure's reader is side effect free
Clojure for Lisp Programmers Part 1 - Rich Hickey · ▶ 19:17–21:24 · 段落范围

一幅画什么时候借出的是读音?

Thoth’s Pill 用借音造字说明,同一个图形可以表示事物,也可以只提供一个音。若两个词读音接近,再添一个表示意义类别的标记,读者便多了一条线索。试着遮住那个额外的标记:纸面笔画还在,读者可在多种解释间作出的选择却变了。类比程序解析时要保留一个差别:人可以借助上下文猜测;程序遇到歧义时要看语言的具体规则。

原文与时间戳 · 2
use it simply for its sound.
Thoth's Pill - an Animated History of Writing · ▶ 10:22–10:26
if you add the logo graph for insect
Thoth's Pill - an Animated History of Writing · ▶ 14:54–14:58

同一句话,是文字输入还是编辑命令?

Rudd 把流畅识别文章与操作编辑器分开看:他的目标是让短语触发搜索、跳转、选择和回调,而非把所有代码逐字拼出来。这样一来,「输入变成指令」的边界落在自定义语法及其上下文里。增加一个方便的说法,也可能占用原来用于输入文字的说法;他在结尾明确提到语法之间会冲突。检查一套语音接口时,可以先列出某个上下文中会被当作命令的短语,再问它们与普通输入怎样区分、冲突时谁决定含义。这是对讲者接口取舍的阅读,不是对现场识别准确率或代码执行的测试。

原文与时间戳 · 2
optimize for the low-level stuff
Using Python to Code by Voice · ▶ 15:08–15:18
things that clash with things you're trying to say
Using Python to Code by Voice · ▶ 27:45–27:54

同一个文件里,哪些内容要由播放器执行?

Ahoy 回顾的 tracker 模块把采样和乐曲放进同一个文件。采样提供可以播放的声音,音符和效果则决定播放器何时取用声音、怎样处理它。可以沿着一次播放追问:如果只换掉一个采样,哪些时刻会听到变化?如果只改一个音符或效果,又是什么在改变?这给「输入从哪一步变成指令」提供了一个不涉及安全攻击的实例。

原文与时间戳 · 2
files that incorporated the sample data along with the song
Trackers: The Sound of 16-Bit · ▶ 17:50–17:57
the music is assembled in real time
Trackers: The Sound of 16-Bit · ▶ 38:55–39:04

模型读到一封邮件,邮件就能决定工具怎么用吗?

本篇把提示注入与输入边界放在一起看,但识别自然语言并不会自动给出安全的执行边界。CaMeL为这个问题补上具体架构:规划模型只根据可信用户请求安排工作,不直接读取外部工具返回的正文;另一个没有工具权限的模型负责解析这些内容。

这个隔离仍不够。如果会议记录给出了收件地址,计划即使没有变化,文件也可能流向不该接收它的人。论文因此让解释器追踪值的来源与允许读取者,再检查工具调用的参数。它把“有没有按原计划执行”推进为“这份数据可以流到哪里”。这里的边界依赖可执行的策略与工具标注;作者仍承认侧信道、确认疲劳和实现验证的缺口,不能把它读成对任意代理的安全证明。

原文与时间戳 · 2
the P-LLM only interacts with the user query
Defeating Prompt Injections by Design · 论文 · § 5.1 The Privileged and Quarantined LLMs · PDF 第 7 页
No, prompt injection attacks are not fully solved.
Defeating Prompt Injections by Design · 论文 · § 9.3 So, Are Prompt Injections Solved Now? · PDF 第 24 页

读完再想一步

在你的系统中找一处解析边界:遇到含糊输入,是拒绝、修复,还是执行?