我的`post`数据通过SSL传递给CURL是否足够安全?

时间:2014-06-26 08:02:13

标签: php security

我正在开发API并希望它完全安全。请考虑此功能代码

public function send_ok($tdata, $mdata)
{
    $url = str_replace('http://', '', $mdata['api_transaction_return_url']);
    $url = str_replace('http://', '', $url);
    $url = 'https://'.$url;
    $process = curl_init($url);
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($process, CURLOPT_SSL_VERIFYHOST, FALSE);

    curl_setopt($process, CURLOPT_POST, 1);
    curl_setopt($process, CURLOPT_POSTFIELDS, $tdata);

    curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);

    $return = curl_exec($process);
}

此功能通过付款确认向​​远程服务器发送响应。 所以,我通过SSL传递数据,但它是否足够安全以及我可以使用哪些其他方法来使我的数据完全安全?

1 个答案:

答案 0 :(得分:2)

SSL提供传输中数据的加密,因此可以避免窥探(让我们跳过关于破解密码套件的一大堆警告等)。这样就可以保证SSL连接的安全。

但是,您真的可以确定 您实际上是在向哪些人发送数据?也许攻击者已经破坏了您的网络,只要您实际上是连接到他而不是您认为正在连接的支付服务器,并且您将所有付款信息直接发送给攻击者。
那么,SSL也有解决这个问题的方法:通过证书进行识别,由权威机构通过公钥基础设施进行验证。如果证书签出对某个域有效,你可以合理地确定你正在与正确的服务器交谈(让我们跳过一大堆关于如果在这里完全没有完成这可能会破坏的警告)

不幸的是,你完全超越了所有这些功能:

curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($process, CURLOPT_SSL_VERIFYHOST, FALSE);

如果您想确定正在与正确的服务器通话,那么这两个选项需要

如果你解决了这个问题,那就相当安全了。与任何常规安全实践所要求的一样合理。它是否能够与拥有合适资源的真正坚定的攻击者站在一起?也许,也许不是。有多种方式可以在理论上或实际上攻击SSL连接,并且您可以减轻其中一些攻击,而其他攻击可能需要您所连接的一方提供支持。
但是,更有可能的是,您的PHP服务器中的某些其他部分具有一些安全漏洞,攻击者将会利用这个漏洞,然后再费心实际破解已经证明具有合理安全性的技术