【问题标题】:Sending post request with sensitive data in php在php中发送带有敏感数据的post请求
【发布时间】:2018-08-13 05:34:54
【问题描述】:

我有一个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 向 api 发送一个 post 请求,如下所示:

https://example.com/api?email={{myemail@gmail.com}}&pass={{my 密码}}&input={{用户输入}}

这将返回一个 json 响应,然后我需要向用户显示该响应。 我是 php 新手,任何建议如何在不影响我的电子邮件和密码的情况下安全地完成这些都是硬编码的值。

【问题讨论】:

  • 让后端通过 curl 完成
  • 您编写的示例意味着您在查询参数中发送输入值。您可能希望在 HTTP Post 正文上发送它。

标签: php


【解决方案1】:

安全地执行此 API 调用的第一步是使用 TLS(即确保表单 POST 到 https URL)。尽管存在其他与 SSL/TLS 相关的问题,但这将保护您的飞行凭据。另一半是尝试将您的凭据保留在日志之外,这在此处翻译为“不要将您的凭据编码到请求 URL 中”。而是将它们作为 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 );
    

注意:至关重要的是,不要将您的凭据放入CURLOPT_URL 行。相反,请确保您可以将它们编码到 CURLOPT_POSTFIELDS 数组中。如果 API 不接受,请根据需要做出安全选择。

【讨论】:

  • 如果所有东西都是通过https发送的,为什么数据在CURLOPT_URL会是个问题?
  • @t.niese 因为它肯定会清晰地出现在服务器日志中。
  • @t.niese 因为几乎所有服务器都记录了请求行。并非所有组织都了解日志的安全性。简而言之,凭据应该是短暂的,而日志记录与此相矛盾。
【解决方案2】:

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

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

我在学校学到了很多关于不同登录方式的理论。也许您可以尝试以下(根据您的要求):

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

在 api 上,您会收到完整的信息集,然后应用您的逻辑(将您的私钥与它结合并与存储的内容进行比较,或者在可能的情况下解密,无论您实施了什么验证)。

【讨论】:

    猜你喜欢
    • 2012-10-31
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2019-01-11
    • 1970-01-01
    • 2020-11-18
    • 2021-10-07
    相关资源
    最近更新 更多