我希望能够通过带有$ _GET变量的命令行执行PHP 。我知道我可以使用exec
执行此操作,但我想了解更多安全风险以及我应该注意哪些事项。我想传递的参数是从MySQL返回的 MySQL auto_incremented ID ,所以我不关心用户输入。但是,仅仅允许这种情况发生在安全性方面应该考虑什么?
脚本将接受订单ID并向客户发送电子邮件发票。这允许我从站点的多个部分执行此功能,只将代码保存在1个位置。
答案 0 :(得分:2)
我认为你真的不需要从命令行执行此操作。创建一个PHP函数并将其包含在您的多个部分中:它会更快。每个例子:
function sendInvoice($orderId) {
// do something
}
然后叫它:
include_once('send_invoice.inc.php');
sendInvoice(42);
这仍然允许代码重用以及维护代码的单一位置。
答案 1 :(得分:1)
为什么不能使用argv / argc?
$id = isset($argv[1]) ? (int)$argv[1] : (int)$_REQUEST['id'];
答案 2 :(得分:1)
对于cmdline脚本$argv
就是答案。但你确实可以注入$_GET
个变量。只需相应地预定义QUERY_STRING
环境变量:
putenv("QUERY_STRING=id=$id");
exec("php script.php");
关于安全性,如果cmdline php脚本启动管理操作,它们在共享主机服务器上可能会更加令人担忧。但是你无能为力。严格遵守document_root中的cmdline脚本,并在可能的情况下应用文件或目录权限。