[英]Sending post request with sensitive data in 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 向 api 发送一个 post 请求,如下所示:
https://example.com/api?email={{myemail@gmail.com}}&pass={{我的密码}}&input={{用户输入}}
这将返回一个 json 响应,然后我需要向用户显示该响应。 我是 php 的新手,任何建议如何在不影响我的电子邮件和密码的情况下安全地完成这些硬编码值。
安全地执行此 API 调用的第一步是使用 TLS(即确保表单 POST 到 https URL)。 尽管存在其他 SSL/TLS 相关问题,但这将保护您的飞行凭证。 另一半是尝试将您的凭据保留在日志之外,这里翻译为“不要将您的凭据编码到请求 URL 中”。 相反,将它们作为 POST 变量的一部分。
用户 POST 数据到您的 PHP 脚本
您的 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 不接受这一点,请根据需要做出安全选择。
您编写的示例意味着您在查询参数中发送输入值。 您可能希望在 HTTP Post 正文中发送它。
另外,通过“妥协”,我相信您的意思是您不想发送密码 123。 你应该担心的一件事(很多)是有一个中间人。 您可以通过 SSL 连接 (HTTPS) 或某种私钥/公钥技术来避免它。
我在学校学到了很多关于不同登录方式的理论。 也许您可以尝试以下内容(根据您的要求):
发送带有email值的HTTP请求,api返回一个密钥(可以存储在每个用户或一般的任何地方 - 小心这个,不要分享你的私人),然后在你收到它之后,结合密码并发送信息验证。
在 api 上,您会收到完整的信息集,然后应用您的任何逻辑(将您的私钥与它结合并与存储的内容进行比较,例如,如果可能,则解密,无论您实施了何种验证)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.