Common Lisp 中格式指令的安全解析

2024-01-10

我想从输入文件中读取字符串(用户可能已修改也可能未修改)。我想将此字符串视为要使用固定数量的参数调用的格式指令。但是,我了解一些格式指令(特别是~/我想到)可能会被用来注入函数调用,使得这种方法本质上是不安全的。

使用时read为了在 Common Lisp 中解析数据,该语言提供了*read-eval*动态变量可以设置为nil禁用#.代码注入。我正在寻找类似的东西,可以防止格式指令内的代码注入和任意函数调用。


如果用户不能引入自定义代码而只能引入格式化字符串,那么就可以避免以下问题print-object。记得使用with-standard-io-syntax http://clhs.lisp.se/Body/m_w_std_.htm(或其定制版本)来控制您将生成的确切输出类型(考虑*print-base*, ...).

您可以扫描输入字符串来检测是否存在~/ (but ~~/有效)并拒绝解释包含黑名单结构的格式。 然而,有些分析比较困难,您可能需要在运行时采取行动。

例如,如果格式字符串格式错误,您可能会遇到必须处理的错误(此外,您可能会为预期参数提供错误的值)。

即使用户没有恶意,您也可能会遇到迭代构造问题:

~{<X>~:*~}

...永远不会停止,因为~:*倒带当前参数。为了处理这个问题,您必须考虑到<X>可能会或不会打印一些东西。您可以实施这两种策略:

  • 设置超时以限制格式化所需的时间
  • 当写入太多时(例如写入字符串缓冲区),让底层流到达文件末尾。

可能还有其他我目前没有看到的问题,请小心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Common Lisp 中格式指令的安全解析 的相关文章

  • 对 SBCL 中的“ql:quickload”和可执行脚本感到困惑

    我一直在尝试在我的可执行脚本中使用 Quicklisp 包 一个 简单的 工作示例是 usr bin sbcl script eval when compile toplevel load toplevel execute ql quick
  • 如何在 SLIME 的 REPL 中获得 Common Lisp 的语法高亮显示?

    我想学习 Common Lisp 并通过 emacs 包管理器安装了 emacs 24 3 和 slime 在 slime REPL 语法高亮中不起作用 另一方面 当我启动 Lisp Mode 在 slime REPL 中 时 表达式的值不
  • 在 LISP 中使用“ash”执行二分查找?

    所以 我现在正在阅读 Land of Lisp 事实证明 Lisp 与我见过的其他编程语言有很大不同 无论如何 本书提供了一些我们要输入到 CLISP REPL 中的代码 defparameter small 1 defparameter
  • Common Lisp 中的未绑定变量

    我是 Lisp 新手 正在阅读 ANSI Common Lisp 第 8 章中的文本生成器示例 我按照该示例并在 LET 变量 prec 的范围内定义了一个函数 see let prec defun see symb let pair as
  • 如何在类Unix操作系统下方便的运行SBCL代码?

    David James 写了问题和答案 我将对其进行编辑以符合 Stackoverflow 标准 使用 SBCL 您可以将 Lisp 代码编译为机器代码 像 Java net C 甚至 C 一样 您将需要运行时 所以有两种方法来编译 Com
  • Clozure Common Lisp - TCP 套接字编程 - 发送回复

    我有一个非常小的程序 它打开一个套接字并接受一个连接 然后它会获取远程 IP 和端口 我想向远程计算机 telnet 发送一条短信并关闭连接 我无法确定哪个函数用于向 telnet 客户端发送消息 The Clozure手册 http cc
  • 最低限度的文本清理

    在接受 存储 处理和显示 Unicode 文本的应用程序中 为了讨论的目的 我们假设它是一个 Web 应用程序 哪些字符应该always从传入文本中删除 我能想到一些 大部分列在C0 和 C1 控制代码维基百科文章 http en wiki
  • Common Lisp 中的(随机)不那么随机?

    好的 最后一个问题 我将用 Common Lisp 完成我的猜数游戏 D 每当游戏开始 或者在第一个游戏之后开始新游戏 时 都会调用以下函数 Play the game defun play If it s their first time
  • LISP 中的变量和符号有什么区别?

    从范围上来说 内存中的实际实现 语法 例如 if let a 1 a 是变量还是符号 约尔格的回答指出了正确的方向 让我补充一点 我将讨论与 Common Lisp 类似的 Lisp 作为数据结构的符号 符号是 Lisp 中真实的数据结构
  • let* 和 set 之间的区别?在 Common Lisp 中

    我正在从事一个基因编程爱好项目 我有一个函数 宏设置 当以 setq setf 形式评估时 将生成一个如下所示的列表 setq trees make trees 2 gt x abs x 然后它将绑定到 lambda 函数
  • 将列表传播到父代 sexp 中

    在任何 lisp 中是否有一种形式可以在父 sexp 中 传播 列表 喜欢 spread 1 2 3 gt 1 2 3 有两种方法可以做到这一点 哪个更好取决于您最终想要什么 一般来说 您可以使用 inside 反引号 表格如下 被评估以生
  • Python,在输出中将所有浮点数打印到小数点后两位

    我需要输出 4 个不同的浮点数到小数点后两位 这就是我所拥有的 print 2f var1 kg 2f var2 lb 2f var3 gal 2f var4 l 这是非常不干净的 而且看起来很糟糕 有没有办法让输出 2f 中出现任何浮动
  • 对于案例,这些表达案例的方法中哪种最好?

    这些都有效 defun testcaseexpr thecase case thecase foo format t matched foo bar format t matched bar funk format t matched fu
  • Lisp 格式和强制输出

    我不明白为什么这段代码在不同的实现中表现不同 format t asdf setq var read 在 CLISP 中 它的行为与预期一致 先打印提示 然后读取 但在 SBCL 中 它显示 then输出 我在网上查了一下 修改了一下 fo
  • 在 Common Lisp 中编写 Lambda 表达式

    我目前正在阅读 Paul Graham 的 ANSI Common Lisp 并且有一个关于编写 lambda 表达式的问题 我们是否需要在 lambda 表达式前面加上前缀 如果我在 REPL 中写这样的东西 它会工作得很好 gt lam
  • printf() var-arg 引用如何与堆栈内存布局交互?

    给出代码片段 int main printf Val d 5 return 0 是否有任何保证编译器会存储 Val d and 5 连续地 例如 d l a V 5 Format String
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 修改功能;保存到 Lisp 中的新函数

    所以我认为 lisp 在其他语言中 的优点之一是它能够实现函数工厂 接受函数作为参数 返回新函数 我想使用此功能对函数进行小的更改并将其保存为新函数 这样如果对原始函数进行更改 它们也会反映在它所基于的新函数中 注意 我不是编写原始函数的人
  • Common Lisp——为什么这个符号不是外部的?

    我正在尝试在 ASDF 中运行测试 如下所示 foo asd defsystem foo tests depends on foo fiveam components module tests components file main pe
  • Python:使用 string.format() 将单词大写

    是否可以使用字符串格式将单词大写 例如 user did such and such format user foobar 应该返回 Foobar 做了这样那样的事情 请注意 我很清楚 capitalize 但是 这是我正在使用的代码 非常

随机推荐

  • Python Pandas:将具有唯一值的行连接起来

    在 Python pandas 中 我有一个大数据框 如下所示 df pd DataFrame a foo bar 3 b foo2 bar2 3 c foo3 bar3 3 d q w e r t y e q2 w2 e2 r2 t2 y
  • NHibernate 2.1 和 Oracle 10g 客户端出现错误

    我需要 NHibernate 2 1 才能与 Oracle 数据库对话 我被要求使用 Oracle 10g 客户端 尝试构建会话工厂时出现以下错误 无法转换类型的对象 Oracle DataAccess Client OracleConne
  • 如何将事件侦听器添加到对象数组

    我有一个对象数组 具体来说easelJS图片 像这样 var imageArray new Array gShape new createjs Shape shape is something imageArray push gShape
  • Cassandra 牺牲了 CAP 定理的哪一部分?为什么?

    有一个很棒的演讲 https github com strangeloop StrangeLoop2013 blob master slides sessions Kingsbury PartitionsForEveryone pdf关于在
  • 使用窗口事件调整画布元素大小

    我正在使用打字稿来绘制画布元素 我想让我的画布元素响应屏幕尺寸 这样我就可以将画布大小与父 div 元素相匹配 我试过用这个删除画布中的大小并在 css 中提供它 但这没有帮助 因为我有两个固定元素 我找到了这个已有 8 年历史的解决方案画
  • 函数组合与函数应用

    谁能给出函数组合的例子吗 这就是函数复合运算符的定义 b gt c gt a gt b gt a gt c f g x gt f g x 这表明它需要两个函数并返回一个函数 但我记得有人用英语表达了逻辑 例如 男孩是人类 gt 阿里是男孩
  • TestNG BeforeMethod 与组

    我想知道 BeforeMethod与组的用法 在http testng org javadoc org testng annotations BeforeMethod html http testng org javadoc org tes
  • 如何在 Mathematica 中为绘图添加阴影

    我想生成如下图所示的图 尽管我可以完成框架 但我不确定如何生成阴影 我想知道在 Mathematica 中对绘图中的某些区域进行着色的一般方法 请帮忙 谢谢 也许您正在寻找RegionPlot RegionPlot 1 x 2 1 y 2
  • UnicodeDecodeError:“utf-8”编解码器无法解码位置 2 中的字节 0xf1:无效的连续字节

    我是一个对使用 Python 进行机器学习感兴趣的新手 所以我从下载了一个数据集https data world nrippner ols regression challenge https data world nrippner ols
  • WCF 托管问题

    您好 我想知道是否有人可以帮助我 我一直在用头撞墙试图解决这个问题 但还没有成功 我在内部网络的远程服务器上的 IIS6 上托管了一个 WCF http systemservices ServiceManagerServices svc h
  • 如何检查 Angular 8 中的响应或状态代码以将文件上传到 S3 预签名 URL 并且 statusCode 为 200

    请求上传文件 upload file to the pre signed url const httpOptions headers new HttpHeaders Content Disposition attachment filena
  • 如何更改光标图标以表示 Google 图表上的某个区域可点击?

    我知道可以更改谷歌饼图的光标图标 但是可以针对该饼图的各个部分进行更改吗 我希望能够显示光标图标的变化 以表示谷歌图表上的区域 部门 区域可以 钻取 目前 它只是指针并在适当的位置显示超链接图标 这是我理想的情况 这有点像黑客 但我为此做了
  • 必须重写的虚函数

    考虑一个基类class Base它有一个功能virtual void foo void 这个函数的实现是在Base 即不是纯虚拟的 从此类继承时是否可以使用一种模式 即class Child public Base 迫使我重写foo 除了使
  • SQL Server Asp.Net - “登录失败”

    我无法让我的 Asp Net 应用程序在我要部署到的服务器上运行 服务器运行的是 Server 2008 R2 我在其上运行 SQL Server 2008 R2 Express 当我浏览该网站时出现错误 用户 WIN 6VLI5UDJ5R
  • 如何在 Firefox 中从 JavaScript 解析 HTML?

    在 Firefox 中解析 XmlHttpRequest 的 HTML 结果 获取 DOM 树 的最佳方法是什么 EDIT I do not有DOM树 我想获取它 XmlHttpRequest 的 responseXML 仅在结果是实际 X
  • 如何防止 Bootstrap 列从一个部分跳到另一部分或在彼此下面?

    我正在为我的项目制作推荐部分 有 4 个 div 但它们的内容不均匀 因此当我开始将屏幕的宽度拉在一起时 col sm 6他们应该像 2 2 一样排列 但是 3 号 div 跳到 4 号 div 的位置 留下一个空白空间 然后 4 号 di
  • 就性能而言,什么时候用 BufferedOutputStream 包装 FileOutputStream 才有意义?

    我有一个模块负责读取 处理字节并将其写入磁盘 字节通过 UDP 传入 在组装各个数据报后 处理并写入磁盘的最终字节数组通常在 200 字节到 500 000 字节之间 有时 字节数组在组装后会超过 500 000 字节 但这种情况相对较少
  • 摆脱科学计数法

    我需要做一些计算 但我遇到的问题是值非常低 例如 我需要得到 0 005 的 2 7 最终得到 1 3500000000000003e 4 这不是我想要的 我只需要知道如何获得这些值的准确百分比 我现在正在做的是
  • IsOrderedBy 扩展方法

    在我的一些测试中 我需要检查列表的顺序并执行类似的操作 DateTime lastDate new DateTime 2009 10 1 foreach DueAssigmentViewModel assignment in dueAssi
  • Common Lisp 中格式指令的安全解析

    我想从输入文件中读取字符串 用户可能已修改也可能未修改 我想将此字符串视为要使用固定数量的参数调用的格式指令 但是 我了解一些格式指令 特别是 我想到 可能会被用来注入函数调用 使得这种方法本质上是不安全的 使用时read为了在 Commo