如何防止在php"exec"的参数中恶意注入(webhook - > bash script)

vik*_*eve 1 php bash http-post code-injection webhooks

我写了一个webhook来集成到chat(slack/mattermost api)中.

启动和运行的最简单方法是一个快速的PHP脚本,如下所示:

<?php
$token = $_POST["token"];
$arg = $_POST["text"];

$output = exec("./webhook_script.sh {$token} {$arg}");
Run Code Online (Sandbox Code Playgroud)

目前,脚本工作正常,但我担心有人可以恶意地执行http POST,其中查询参数text(脚本:) $arg具有某种注入攻击.

例: http://myserver/webhook.php?token=abc&text=123;rm -rf *

因此$arg变得123; rm -rfexec命令执行恶意rm -rf *

这与我熟悉的"sql注入"本质上类似,但我不确定如何使bash脚本安全...

是以某种方式引用参数,或者使用a regex来检查脚本参数是一件简单的事情吗?

Mic*_*ton 5

您需要escapeshellarg()在传递每个shell参数之前调用它们exec().这将每个参数包装在单引号中,并转义可能存在的任何单引号,从而使任何此类攻击受挫.

$token = escapeshellarg($_POST["token"]);
$arg = escapeshellarg($_POST["text"]);
Run Code Online (Sandbox Code Playgroud)