我有一个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的新手,任何建议如何安全地完成这项工作而不会损害我的电子邮件和密码,这些都是硬编码的值。
答案 0 :(得分:1)
安全执行此API调用的第一步是使用TLS(即,确保表单POST到https URL)。尽管存在其他与SSL / TLS相关的问题,但这将保护您的机上凭证。另一半是尝试将您的凭据保留在日志之外,这会在此处转换为不将您的凭据编码到请求URL中。&#34;相反,将它们作为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不接受,请根据需要进行安全选择。
答案 1 :(得分:0)
您撰写的示例意味着您在查询参数中发送输入值。您可能希望在HTTP Post主体上发送它。
此外,通过“妥协”&#39;我相信你的意思是你不想发送密码123。你应该担心(有很多人)有一件事就是拥有一个中间人。您可以通过SSL连接(HTTPS)或某种私钥/公钥技术来避免它。
我在学校里以不同的登录方式学到了很多理论。也许你可以尝试一些(根据你的要求):
发送带有电子邮件值的HTTP请求,api返回一个密钥(可以存储在每个用户或一般的任何地方 - 小心这个,不要共享你的私人),然后在收到它后,结合密码和发送信息进行验证。
在api上,您会收到完整的信息,然后应用您的逻辑(将您的私钥与其结合并与例如存储的内容进行比较,或者解密,如果可能的话,无论如何你已经实施的验证。)