我已经编写了一个 webhook 来集成到聊天中(slack/mattermost api)。
启动和运行它的最简单方法是一个快速的 php 脚本,如下所示:
<?php
$token = $_POST["token"];
$arg = $_POST["text"];
$output = exec("./webhook_script.sh {$token} {$arg}");
就目前而言,脚本工作正常,但我担心有人会恶意地执行 http POST,其中查询参数 text
(script: $arg
)某种注入(inject)攻击。
示例:http://myserver/webhook.php?token=abc&text=123;rm -rf *
所以 $arg
变成了 123; rm -rf
和 exec
命令执行恶意的 rm -rf *
这在本质上类似于我熟悉的“sql 注入(inject)”,但我不确定如何使 bash 脚本安全...
以某种方式引用参数,或者使用 regex
来检查脚本参数是一件简单的事情吗?
最佳答案
您需要调用escapeshellarg()
在将每个 shell 参数传递给 exec()
之前。这会将每个参数用单引号括起来,并转义可能存在的任何单引号,从而阻止任何此类攻击。
$token = escapeshellarg($_POST["token"]);
$arg = escapeshellarg($_POST["text"]);
关于php - 如何防止 php "exec"参数中的恶意注入(inject)(webhook -> bash 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884051/