带有卷曲字符串的shell_exec

时间:2019-07-03 18:57:00

标签: php security curl

我使用了多个API,发现它们几乎都使用curl来演示示例身份验证/非身份验证。请求。

我的问题是:

在生产环境中的服务器上使用shell_exec( % some curl string % );发出请求有多危险?

与此相关的额外风险到底是什么?

PHP“本机”用于请求的系统是curl程序包,它为curl功能提供了一些包装,并且可能在编译后导致纯curl。

但是,当您编写代码时,它既麻烦又冗长。

我做了一些测试,shell_exec看起来工作正常。

例如,以下代码完全按预期返回结果。 $json的格式完全正确。

$res = shell_exec('curl "https://www.zohoapis.com/crm/v2/settings/profiles" -H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"');

$json = json_decode($res, true);

var_dump( $json, $res );

考虑到发生在服务器深处的 actual 动作应该完全相同,流程上也没有任何重大差异(无论如何都没有涉及到用户输入,所使用的数据相同,等等)。我看不到使用shell_exec可能引起的负面影响或任何其他风险。

另一方面,潜在的利益将是相当可观的。

1 个答案:

答案 0 :(得分:1)

为了避免内置API,这是相当大的开销(escapeshellargexec / proc_open)。有很多CLI工具(ffmpeg,uno / soffice等),比起古怪的In-PHP实现,您更应该首选。卷毛不属于该类别。

如果您不想使用Guzzle或其他跨语言版本的PHPRequests,则可以使用更简单的卷发包装器

  • 参见例如reddit post代表基本变体。
  • 甚至是我使用过的curl().php

    $res = curl($api_url)->httpheader(["Auth: …"])->exec();
    

看到了吗?不必太钝。类接口仅约avoiding the CURL_ prefixes,并保留现有的函数/选项名称。 (因为,是的,当然,原始的PHP curl API很糟糕。)

而且您将避免对不同的端点进行硬编码和重复auth键。