加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 逃离壳牌回声

发布时间:2021-08-28 03:43:15 所属栏目:大数据 来源: https://www.jb51.cc
导读:我试着做我的研究,只有很多方法可以调用shell命令,还有更多方法可以删除有害字符,我将以stackoverflow的形式获取专家的最佳建议. 我希望找到像我见过其他语言的东西,所以发送命令的参数实际上是通过一个函数传递的,比如: do_command(“ls”,“ – l”,$Dire

我试着做我的研究,只有很多方法可以调用shell命令,还有更多方法可以删除有害字符,我将以stackoverflow的形式获取专家的最佳建议.

我希望找到像我见过其他语言的东西,所以发送命令的参数实际上是通过一个函数传递的,比如:

do_command(“ls”,“ – l”,$Directory);

它将为您处理$Directory变量中的任何有害内容.我还没有用PHP发现这个.

这是我正在使用的代码:

<?PHP
    session_start();

    $AdminEmail = "random_email@gmail.com";
    $CatalogEmails = array("");
    $QuoteEmails = array("");
    $PartsEmails = array("");

    $Subject = $_SESSION['Email_Subject'];
    $Body = $_SESSION['Email_Body'];
    $Headers = $_SESSION['Email_Headers'];
    $Type = $_SESSION['Type'];

    msmtp($AdminEmail, $Subject, $Body, $Headers, "meyers");

    if ($Type == "Catalog") {
        foreach ($CatalogEmails as $AdditionalEmail) {
            msmtp($AdditionalEmail, $Subject, $Body, $Headers, "meyers");
        }
    } else if ($Type == "Quote") {
        foreach ($QuoteEmails as $AdditionalEmail) {
            msmtp($AdditionalEmail, $Subject, $Body, $Headers, "meyers");
        }
    } else if ($Type == "Parts") {
        foreach ($PartsEmails as $AdditionalEmail) {
            msmtp($AdditionalEmail, $Subject, $Body, $Headers, "meyers");
        }
    }

    function msmtp($To, $Subject, $Body, $Headers, $Account) {
        $Email = "To: $TonSubject: $Subjectn$Headersnn$Bodyn";
        exec("echo "$Email" | msmtp --account=$Account $To");
    }

    session_destroy();
?>

我知道有一个内置的PHP邮件功能,几乎可以解决这个问题,但我正在运行多个SMTP服务器,msmtp是我使用的程序,根据“帐户”发送电子邮件,电子邮件将在.在这种情况下,它将是“meyers”帐户.

所有会话变量都包含HTML(< br>< b>‘s等),其中也包含一些$_POST变量.我使用PHP 5.3所以没有神奇的引用.

我知道使用回声是一种可怕的方式,这就是我要进入stackoverflow的原因.我的目标是,尽管他们向我投掷任何疯狂的角色,但电子邮件仍将通过.我知道shell / bash很挑剔 – 我认为它不仅仅是逃避双引号.

我尝试使用escapeshellcmd escapeshellarg和htmlentities,它们都逃脱太多或弄乱了电子邮件中的HTML.

解决方法:

将电子邮件内容写入文件,然后将文件内容重定向为msmtp命令的输入.

file_put_contents($tempfile,$Email);
exec("msmtp --account=$Account $To < $tempfile");

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读