在php中发送带有敏感数据的发布请求

时间:2018-03-05 14:22:18

标签: php

我有一个html页面如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>HTML page</title>
    </head>
    <body>
    <form method="post" id="myform">
        <input type="text" name="firstname">
        <button type="submit">send</button>
    </form>
    </body>
    </html>

从这个表单我想使用php发送一个post请求到api:

  

https://example.com/api?email= {{myemail@gmail.com}}&安培;传= {{我的   密码}}&amp; input = {{user input}}

这将返回一个json响应,然后我需要向用户显示。 我是php的新手,任何建议如何安全地完成这项工作而不会损害我的电子邮件和密码,这些都是硬编码的值。

2 个答案:

答案 0 :(得分:1)

安全执行此API调用的第一步是使用TLS(即,确保表单POST到https URL)。尽管存在其他与SSL / TLS相关的问题,但这将保护您的机上凭证。另一半是尝试将您的凭据保留在日志之外,这会在此处转换为不将您的凭据编码到请求URL中。&#34;相反,将它们作为POST变量的一部分。

  1. 用户将数据发布到PHP脚本

  2. 您的PHP脚本使用TLS将数据发布到第三方API。示例代码:

    $data = [
      "field1" => "field1 value, perhaps as built from user's input",
      "field2" => ...
    ];
    
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_URL => 'https://thirdpartyapi...',
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query( $data )
    ]);
    
    $response = curl_exec( $ch );
    curl_close( $ch );
    
  3. 值得注意的是:至关重要的是,将您的凭据放入CURLOPT_URL行。相反,请确保您可以在CURLOPT_POSTFIELDS数组中对其进行编码。如果API不接受,请根据需要进行安全选择。

答案 1 :(得分:0)

您撰写的示例意味着您在查询参数中发送输入值。您可能希望在HTTP Post主体上发送它。

此外,通过“妥协”&#39;我相信你的意思是你不想发送密码123。你应该担心(有很多人)有一件事就是拥有一个中间人。您可以通过SSL连接(HTTPS)或某种私钥/公钥技术来避免它。

我在学校里以不同的登录方式学到了很多理论。也许你可以尝试一些(根据你的要求):

发送带有电子邮件值的HTTP请求,api返回一个密钥(可以存储在每个用户或一般的任何地方 - 小心这个,不要共享你的私人),然后在收到它后,结合密码和发送信息进行验证。

在api上,您会收到完整的信息,然后应用您的逻辑(将您的私钥与其结合并与例如存储的内容进行比较,或者解密,如果可能的话,无论如何你已经实施的验证。)