带有curl字符串的shell_exec

p5cysglq  于 2022-11-13  发布在  Shell
关注(0)|答案(1)|浏览(144)

在使用过几个API之后,我发现几乎所有的API都使用curl来演示一个示例auth./not-auth.请求。
我的问题是:
在生产环境中的服务器上使用shell_exec( % some curl string % );发出请求会有多危险?
与此相关的额外风险到底是什么?
PHP“本机”用于请求的系统是curl包,它为curl功能提供了一些 Package 器,并且在编译后可能会产生纯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
另一方面,潜在的好处也相当可观。

cbeh67ev

cbeh67ev1#

为了避免使用内置API,这需要相当多的开销(escapeshellargexec/proc_open)。有相当多的CLI工具(ffmpeg,uno/soffice,...),你应该更喜欢这些古怪的PHP实现。Curl不属于这一类。
如果您不想使用Guzzle或更跨语言的PHPRequests,那么请选择更简单的curl Package 器

  • 例如,参见yesterdays reddit post以获得基本变体。
  • 或者甚至是curl().php,我使用/制作:
$res = curl($api_url)->httpheader(["Auth: …"])->exec();

看到了吗?不一定非要这么迟钝。类接口仅仅是avoiding the CURL_ prefixes并保留现有的函数/选项名。(因为,当然,原始的PHP curl API很糟糕。)
您还可以避免为不同的端点硬编码和重复auth密钥。

相关问题