gpt4 book ai didi

security - Lisp 数据安全/验证

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:09 25 4
gpt4 key购买 nike

目前这对我来说真的只是一个概念性问题。

在 Lisp 中,程序就是数据,数据就是程序。 REPL 正是这样做的 - 读取然后评估。

那么如何以一种安全的方式从用户那里获取输入呢?显然这是可能的 - 我的意思是 viaweb - 现在 Yahoo!Stores 非常安全,那么它是怎么做到的?

最佳答案

REPL 代表读取评估打印循环。

(loop (print (eval (read))))

以上只是概念上的,真正的 REPL 代码要复杂得多(包括错误处理、调试……)。

你可以在 Lisp 中读取各种数据而无需对其进行评估。评估是一个单独的步骤 - 独立于读取数据。

Lisp 中有各种各样的IO 函数。提供的函数中最复杂的通常是 READ,它读取 s 表达式。 Common Lisp 中有一个选项允许在 READ 期间进行评估,但在读取数据时可以而且应该将其关闭。

因此,Lisp 中的数据不一定是程序,即使数据是程序,Lisp 也可以将程序作为数据读取——无需评估。 REPL 只能由开发人员使用,不应暴露给任意用户。要从用户那里获取数据,可以使用普通的 IO 函数,包括像 READ 这样的函数,它可以读取 S 表达式,但不对它们求值。

以下是一些不应该做的事情:

  • 使用 READ 读取任意数据。 READ 示例允许读取非常大的数据 - 没有限制。

  • 在 READ 期间进行评估('read eval')。这应该被关闭。

  • 从 I/O 中读取符号并调用它们的符号函数

  • 当您的函数需要普通列表时,使用 READ 读取循环数据结构。沿着循环列表走下去可以让您的程序忙碌一段时间。

  • 在读取数据时不处理语法错误。

关于security - Lisp 数据安全/验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com