AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1108609
Accepted
wu-lee
wu-lee
Asked: 2022-08-20 06:55:02 +0800 CST2022-08-20 06:55:02 +0800 CST 2022-08-20 06:55:02 +0800 CST

exim4 的 `${sqlite_quote ... }` 扩展是否会破坏扩展值?

  • 772

我正在将具有一些自定义过滤器的 exim4 安装升级到 Debian 11。(具体来说,过滤器是这个。)

由于它使用了 Exim 4.94,我现在遇到了新的“污染变量”功能,它破坏了我的过滤器。在调试模式下检查 Exim 时exim4 -bdf -d+filter出现错误是指受污染的文件名(为便于阅读而添加了一些换行符):

102536 LOG: MAIN PANIC
102536   Tainted filename for search '/var/spool/exim4/db/disposable-aliases.db'
102536  Filter error: failed to expand 
  "${lookup sqlite{/var/spool/exim4/db/disposable-aliases.db \
    select default_remaining from stem_configs \
    where stem = '${quote_sqlite:$local_part}'} {$value}{0}}" 
  in add command: NULL
102536 Filter: end of processing

在这种情况下,对文件名的引用似乎是虚假的,因为首先文件名是硬连线的(所以不能被污染?)其次,如果我用'${quote_sqlite:$local_part}'文字值替换查询的一部分,错误就会停止(至少来自这个特定的查找)。

因此,我怀疑问题实际上是$local_part查询中存在的问题,而不是文件名。

我发现$local_part在某些情况下有一个未受污染的版本可用,$local_part_data但是在我的情况下,它没有被设置,因此没有用。

更多搜索可在此处的 Exim4 文档中找到此断言:

如果查询中使用了受污染的数据,则应使用适合查找的 ${quote_:} 扩展运算符将其引用 [原文如此]。

这似乎暗示着${sqlite_quote: .. }扩展应该对$local_data. 这似乎是明智的,但这实际上是否正确,因为如果我用文字替换扩展,污染问题就会停止?

如果${sqlite_quote: .. }真的是去污点它的结果,那么是什么导致这个查找被拒绝?

如果不是,那我还有什么办法?上面的 sqlite 查找实际上旨在根据存储在数据库中的有效值列表验证本地部分,并且应该能够去除该值!

我应该补充一点:我不能使用文件查找,因为这个有效的列表需要动态配置,在 exim4 配置文件之外。

exim
  • 0 0 个回答
  • 73 Views

0 个回答

  • Voted
  1. Best Answer
    Jasen
    2022-08-21T21:50:30+08:002022-08-21T21:50:30+08:00

    ${quote_...不要进行去污。

    并且 exim 污染在整个字符串上,所以

    在

    /var/spool/exim4/db/disposable-aliases.db \
        select default_remaining from stem_configs \
        where stem = '${quote_sqlite:$local_part}'
    

    '${quote_sqlite:$local_part}'仍然受到污染,并且污染扩散到文件名,破坏了查找。

    exim 规范说您可以将文件名放在单词“sqlite”之后(在包含查询的大括号之外)

    [...] 允许为每个查询使用单独的文件,[...] 使用以逗号分隔的选项附加到“sqlite”查找类型词。选项是单词“file”,然后是等号,然后是文件名

    ${lookup sqlite,file=/var/spool/exim4/db/disposable-aliases.db \
        {select default_remaining from stem_configs \
        where stem = '${quote_sqlite:$local_part}'}
    

    exim 规范 9.26 - 关于 sqlite 的更多信息

    您当前使用的方法已被弃用,因此不再记录。

    • 0
  2. wu-lee
    2022-08-24T11:17:40+08:002022-08-24T11:17:40+08:00

    只是为了添加到@Jasen 的答案(使用新的 sqlite 查找语法,问题就消失了),根据使用的 Exim 版本,有一些皱纹:

    • Exim 的错误在这里似乎具有误导性 - 问题是受污染的数据,但源不是文件路径,正如它所暗示的那样。
    • 我相信污点检查是在 Exim 4.93 中首次添加的(来自 src/README.UPDATING 并且还在源代码历史记录中检查“污点”一词)
    • Exim 4.94sqlite_dbfile实现了全局设置,但不支持file=查找选项。所以没有办法使用较新的语法并拥有多个 sqlite 数据库。(这是我目前在 Debian 11 中使用 4.94.2 的经验,在这里特别提到,请检查源代码历史)
    • 仅在 Exim 4.95 中支持该file=选项(同上;提交在这里)。
    • 如果您尝试使用该file=选项,Exim 4.94 的错误也会产生误导:它显示“sqlite”查找所需的绝对文件名”,即使文件名是未受污染的和绝对的。

    (大部分来自这里的线程讨论)

    • 0

相关问题

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 将所有(未被拒绝的)垃圾邮件重定向到 sa-exim 中的特殊邮箱

  • 设置 Exim 转发邮件

  • 我可以在 Exchange 2007 的服务器端强制执行邮件规则吗?

  • 用于从多个 IP 地址发送电子邮件的 Linux 电子邮件服务器

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve