我使用了多个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可能引起的负面影响或任何其他风险。
另一方面,潜在的利益将是相当可观的。
答案 0 :(得分:1)
为了避免内置API,这是相当大的开销(escapeshellarg
,exec
/ proc_open
)。有很多CLI工具(ffmpeg,uno / soffice等),比起古怪的In-PHP实现,您更应该首选。卷毛不属于该类别。
如果您不想使用Guzzle或其他跨语言版本的PHPRequests,则可以使用更简单的卷发包装器。
甚至是我使用过的curl().php:
$res = curl($api_url)->httpheader(["Auth: …"])->exec();
看到了吗?不必太钝。类接口仅约avoiding the CURL_ prefixes,并保留现有的函数/选项名称。 (因为,是的,当然,原始的PHP curl API很糟糕。)
而且您将避免对不同的端点进行硬编码和重复auth键。