如何使用PHP安全地发送服务器回发?
我正在构建一个应用程序,它将向用户提供的url(我希望…)发送http请求 也许你们大多数人都知道这是回发、回调或webhook 但是,我担心安全性,因为另一台服务器将发送响应。该响应可能包含代码或谁知道是什么 到目前为止,我已经考虑了以下功能:如何使用PHP安全地发送服务器回发?,php,curl,postback,file-get-contents,webhooks,Php,Curl,Postback,File Get Contents,Webhooks,我正在构建一个应用程序,它将向用户提供的url(我希望…)发送http请求 也许你们大多数人都知道这是回发、回调或webhook 但是,我担心安全性,因为另一台服务器将发送响应。该响应可能包含代码或谁知道是什么 到目前为止,我已经考虑了以下功能: Curl() 文件获取内容() 在不打开安全漏洞的情况下,最安全的方法是什么?如果不处理服务器的响应,在任何情况下都不会出现安全问题 例如,当您使用: $url = 'http://www.example.com/testaddr'; $resul
- Curl()
- 文件获取内容()
在不打开安全漏洞的情况下,最安全的方法是什么?如果不处理服务器的响应,在任何情况下都不会出现安全问题 例如,当您使用:
$url = 'http://www.example.com/testaddr';
$result = file_get_contents($url);
unset($result);
您有一个包含数据的变量。但这些数据尚未得到处理
使用cURL,您可以使用以下选项获得相同的方法:
$url = 'http://www.example.com/testaddr';
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
//If you need to check result, use this:
if (!curl_errno($curl)) {
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_code === 200) {
echo "OK";
} else {
echo 'Unexpected HTTP code: ', $http_code, "\n";
}
}
curl_close($curl);
unset($result);
在这种情况下,它是相同的,您得到$result var的响应,但是,您没有使用它,在这种情况下,它不是一个安全故障
另外,在这两种情况下,出于安全原因和防止过度内存使用,我在完成过程后删除$result变量
正如您在PHP文档中看到的:
CURLOPT_RETURNTRANSFER TRUE以字符串形式返回传输
返回curl_exec()的值,而不是直接输出它
两个不同的层次
我认为你有两个不同的安全级别,你想解决。您可能希望保护通信通道以避免有人欺骗http请求,并且您可能希望清理响应以避免令人讨厌的副作用
保护HTTP请求的安全
这一部分在很大程度上取决于目标服务器以及如何处理通信。如果您可以强制使用HTTPS,那么您可以非常安全地抵御攻击。否则你总是容易被欺骗
净化反应
当您将响应返回到服务器时,这完全取决于您如何使用这些数据。这与选择的函数没有多大关系,而是与调用后如何使用数据有关。
因为您允许用户以这种方式输入,所以只需期待最坏的结果。此时,最常见的清理输入的最佳实践是:使用PDO访问数据库,使用HH;格式等等
我希望这能回答你的问题,否则请随意评论我的答案 背景是什么?请求的“响应”将用于什么目的?@Landen我们不会将响应用于任何目的。我们主要是向他们发送数据,而不是相反的方式。虽然能够知道我们收到了200个响应可能会有点用处。如果您没有进行评估或将其合并到代码中,您不必担心响应是什么。在这一点上,您所做的只是单向发送信息。使用curl,您可以只读取状态代码,而忽略主体。如果他们在函数中插入url以外的内容,该怎么办?这取决于函数的兼容性。例如,如果使用正确的选项,可以使用CURL获取ftp文件。但是,在这种情况下,返回代码可以更改。