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 / 问题 / 15962
Accepted
finnw
finnw
Asked: 2009-05-31 16:52:05 +0800 CST2009-05-31 16:52:05 +0800 CST 2009-05-31 16:52:05 +0800 CST

使用来自 CGI 的 unix 'mail' 命令 - 危险吗?

  • 772

我正在向网页添加反馈表,并想知道通过“邮件”命令简单地过滤 TEXTAREA 元素的内容(解码后)以向页面的维护者发送电子邮件是否安全。

我查看了手册页,看不到滥用它的方法,特别是只要“邮件”不在交互模式下运行,波浪号转义被禁用,“。” 单独一行不会终止消息正文。

但是我还应该注意其他危险吗?

该命令类似于:

echo "$MESSAGE_BODY" | mail [email protected] -s 'Website feedback'
email cgi unix shell
  • 6 6 个回答
  • 513 Views

6 个回答

  • Voted
  1. Sekenre
    2009-05-31T17:03:08+08:002009-05-31T17:03:08+08:00

    是的,这很危险。邮件消息可以包含以波浪号 ~ 字符开头的行,邮件程序将其视为转义序列。这包括外壳转义和添加新收件人。(嗯,垃圾邮件!)

    看看

    $ man mail
    

    看看我的意思。

    • 2
  2. Xerxes
    2009-05-31T18:03:17+08:002009-05-31T18:03:17+08:00

    你问这个很好 - 许多人只是想完成工作,因此在“啊……没关系”的基础上引入了一大堆漏洞。

    话虽如此,我认为做你正在做的事情很好——但只要你使用过滤器——而不是你自己编写的过滤器,而是一个开源的(因此开放给公众监督)、成熟的过滤器(已经存在了一段时间)。我还要确保过滤器去除任何可能嵌套一些讨厌的 XSS 攻击的 HTML 标记和内容。

    使用一个开源库,你可以在其中找到一个基本上就是我想要的。(永远不要使用任何封闭的安全应用程序——它们都注定要失败——我可以在那条评论上签名)。

    • 1
  3. amh
    2009-05-31T17:02:52+08:002009-05-31T17:02:52+08:00

    我会尽量避免从 CGI 调用任何命令。我确信您使用的任何语言都应该有一个库来发送电子邮件。

    • 0
  4. duffbeer703
    2009-05-31T17:08:01+08:002009-05-31T17:08:01+08:00

    这是一个巨大的安全漏洞。这是编写安全 CGI 代码的资源。

    只是为了给您一个想法,以下是您需要注意的具有特殊用途的字符列表:

    Character Name   Character   Problems
    backslash        \   quoting
    double quote     "   quoting
    single quote     '   quoting
    dollar sign      $   variable substitution
    ampersand        &   command separator
    greater than     >   I/O redirection
    less than        <   I/O redirection
    asterisk         *   file globbing
    question mark    ?   file globbing
    left bracket     [   file globbing
    right bracket    ]   file globbing
    left paren       (   word separator
    right paren      )   word separator
    pipe             |   command separator
    backtick         `   subcommand execution
    semicolon        ;   command separator
    pound sign       #   comment character (sh only)
    caret            ^   command separator (sh only)
    exclamation      !   history execution (csh only)
    tilde            ~   username expansion (csh only)
    carriage return  <ascii 13>   command separator
    line feed        <ascii 10>   command separator
    space            word separator
    tab              ascii 9   word separator
    NULL             ascii 0   truncates input
    

    使用其他人已经实现和调试过的库。电子邮件表格以前做过,不要重新发明轮子!

    • 0
  5. cstamas
    2009-06-01T01:52:13+08:002009-06-01T01:52:13+08:00

    您使用哪种 CGI?大多数 cgi 语言/框架都支持发送邮件。它们总是比调用外部命令好。好吧,PHP 的 mail() 确实很糟糕,但仍然比调用外部命令更好。

    从安全角度来看,建议使用 SMTP 发送邮件(例如到 localhost)。

    • 0
  6. Best Answer
    niXar
    2009-06-01T02:11:27+08:002009-06-01T02:11:27+08:00

    不要使用邮件,这是一个面向行的最终用户程序。使用大多数 MTA 中包含的“sendmail”命令(但不要使用那段被诅咒的 shblip,即 sendmail 程序)。它旨在以编程方式使用。例如,我知道 postfix 和 qmail 包含它。

    cat mailmessage.txt | sendmail -ffrom@yourhost recipient@theirhost
    

    附录:只要您知道自己在做什么,从 CGI 调用程序不一定“危险”。特别是,就像在这种情况下一样,确保您调用的程序不是为最终用户准备的,或者不是在交互模式下调用的(大多数这样的程序都允许生成一个 shell!)

    • 0

相关问题

  • 在 .bashrc 中设置环境变量的最佳方法是什么?

  • 针对大量邮件的 SMTP 服务的建议 [关闭]

  • 多操作系统环境的首选电子邮件客户端

  • Exchange 2007 的备份解决方案

  • 更改 PHP 的默认配置设置?

Sidebar

Stats

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

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +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