First name: 在寻找解决方案时,我发现了不同的方法,但它们都不适合我。例-6ren">
gpt4 book ai didi

php - 将加密形式的表单数据重定向到另一个域

转载 作者:搜寻专家 更新时间:2023-10-31 21:24:23 24 4
gpt4 key购买 nike

我想通过 url 以加密形式将表单数据发送到另一个域

<form action="http://localhost:85/abc/?<?php echo $_POST['name'] ?>" method="POST">
First name:<br>
<input type="text" name="name" placeholder="name">
<input type="submit" value="Submit">
</form>

在寻找解决方案时,我发现了不同的方法,但它们都不适合我。例如我发现如果我在表单中使用 GET 方法,那么我可以像这样发送数据

<form action="http://localhost:85/abc/?<?php echo $_GET['name'] ?>" method="GET">

它的工作 但是这个解决方案的问题是它不以加密形式发送数据 + 我不能将我的表单方法从 POST 更改为 GET 因为from 是由名为 caldera forms 的插件创建的。我只能更改其中的表单操作。

根据其他解决方案,我尝试使用这样的操作

<form action="http://localhost:85/abc/?<?php echo $_REQUEST['name'] ?>" method="POST">

但这对我也不起作用。任何建议我还能尝试什么。现在我正在本地主机上通过创建一个小表单而不是插件来测试它。

最佳答案

修改后的答案:

如果您对参数进行加密,那么将其作为 GET 或 POST 参数传递是无关紧要的,尽管我建议通过 POST 传递所有与安全相关的信息,而不是将其作为查询字符串的一部分发送(这是URL 中问号后的部分,即 http://localhost:85/abc/?Rishabh 中的 Rishabh)因为查询字符串将在浏览器历史记录中可见和网络服务器日志,如所讨论的那样 here .

无论如何,这里至少有两个选择:

选项 1:使用 HTTPS/SSL

如果您使用 SSL 安全通信(“https://”而不是“http://”),所有数据,甚至查询字符串,都将被加密并发送到服务器,因此无需手动加密参数。仍然有拦截数据的方法(中间人攻击或伪造的 SSL 证书),但这是一种非常安全的数据传输方式。在您的服务器上需要一个 SSL 证书(可以是自签名的或由所谓的“CA 机构购买”)。如果您使用的是 Linux 和 Apache,here's an article explaining itthis one 解释了它适用于 Windows 和 Apache。

方式二:手动加解密

发件人:

function doEncrypt($encrypt)
{
$crypt_key= '%{is}§a/G00d+kEy.F0r#3ncRypT!0n';

$iv= mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$crypted= mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $crypt_key, $encrypt, MCRYPT_MODE_ECB, $iv);
$encode= base64_encode($crypted);
return $encode;
}
$name= 'Rishabh';
$encoded= doEncrypt($name);
?>
<form action="http://localhost:85/abc/?<?php echo $encoded; ?>" method="GET">

接收器(位于您的 abc 目录中):

function doDecrypt($decrypt)
{
$crypt_key='%{is}§a/G00d+kEy.F0r#3ncRypT!0n';
$decoded= base64_decode($decrypt);
$iv= mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $crypt_key, $decoded, MCRYPT_MODE_ECB, $iv);

return str_replace("\\0", '', $decrypted);
}
$name= doDecrypt($_REQUEST['QUERY_STRING']);

这是一个具有上述功能的工作示例:phpFiddle .

这里是 more info关于通过 curl 传输表单数据,编码和解码可以使用 mcrypt 完成以安全的方式扩展 PHP。

您的代码的另一条评论和解释:

<form action="http://localhost:85/abc/?<?php echo $_POST['name'] ?>" method="POST">

will output the variable name that has previously been posted as part of a form submit, the parameter will be send as part of the GET-/Query string of the form request, all other elements inside the form will be send as part of a form submit.

<form action="http://localhost:85/abc/?<?php echo $_GET['name'] ?>" method="GET">

will output the variable name that has been passed along as a GET-/query string parameter, again it will be part of the Query string of the form request. All other form elements will be send as part of the query string rather than as form submit.

<form action="http://localhost:85/abc/?<?php echo $_REQUEST['name'] ?>" method="POST">

will output a parameter name that has either been posted via form submit or as part of the query string, it will also be part of the query string of the form request. All other form elements will be send as part of the POST / form data, same as in example 1.

关于php - 将加密形式的表单数据重定向到另一个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39364501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com