Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP传递重要数据时_Php - Fatal编程技术网

使用PHP传递重要数据时

使用PHP传递重要数据时,php,Php,当使用Get或Post将数据传递给另一个PHP脚本时,我是否应该使用带salt的MD5对其进行加密?还是有更好的方法呢?这取决于你想完成什么 通常,如果您只想验证数据是否来自您的应用程序,请将数据与验证数据未被篡改的哈希一起传递 如果您希望对请求中的数据进行真正的加密,那么应该研究加密而不是散列 $a = 2; $b = 3; $hash = sha1($salt.$a.$b) $link = "http://www.domain.tld/?index.php?a=$a&b=$b&am

当使用Get或Post将数据传递给另一个PHP脚本时,我是否应该使用带salt的MD5对其进行加密?还是有更好的方法呢?

这取决于你想完成什么

通常,如果您只想验证数据是否来自您的应用程序,请将数据与验证数据未被篡改的哈希一起传递

如果您希望对请求中的数据进行真正的加密,那么应该研究加密而不是散列

$a = 2;
$b = 3;
$hash = sha1($salt.$a.$b)

$link = "http://www.domain.tld/?index.php?a=$a&b=$b&hash=$hash";
然后:


什么样的数据?MD5不是一个加密函数,它是一个散列函数——一旦你MD5它就没有“未加密”,你就无法取回原始数据


如果您正在传输关键数据(如信用卡、银行账户或社会保险号码),则应使用安全SSL连接(即)。

如果您正在发送敏感数据(如密码、用户名甚至电子邮件),则应以某种“强”方式加密发送此数据。它可以以普通方式发送,但可以通过HTTPS发送

如果HTTPS不是一个选项,您可以始终使用一些免费/开放的解决方案加密数据,如


顺便说一句,MD5是“单向的”(one-way),因此您无法轻松地取消MD5。

我得到的印象是,这个问题的根本动机是错误地认为PHP不如其他web开发语言安全。像ASP/.NET这样的其他平台可能有预先构建的方法来保守最高机密,但这些方法只有在使用时才起作用。PHP也是如此。将您的问题视为对PHP安全性的担忧(这是一个假设,虽然我可能错了,但这是一个流行的假设),我会回答:使用PHP保护数据传输的最佳方法是使用与所有其他平台相同的实践和技术,如SSL、强密码、确认IP地址,不要把钥匙放在垫子下面(即基于角色的cookies),以及这个问题的所有其他建议


话虽如此,您显然希望安全,希望使用PHP,所以我不会打断您的话。但我强烈建议您学习一些基本的网络安全技术,这样您不仅可以知道如何加密数据,还可以知道需要注意的其他事项。

如果您不想使用HTTPS连接,也不想传递敏感数据,我建议对数据进行加密,并在加密过程中可能使用一个加密程序

你可能想看看这个


虽然与GET/POST数据没有特别关系,但我发现了一篇题为“如何保护PHP应用程序中的数据”的文章。

我知道这是一个nit,但MD5是一个单向散列。因此,您只能使用它来“加密”数据,如以后不必解密的密码。您确实希望使用密钥,而不是salt,并最终获得消息身份验证码。salt旨在添加随机数据,以使创建包含所有可能值及其散列输出的字典变得困难,因为它人为地延长了散列值(如果输入通常为8位,则得到2^8=256个可能的散列,但添加8位salt会得到2^16=65535个可能值)[继续下一条评论]非常奇怪,散列如何确认数据没有被篡改?难道我就不能修改它并重新哈希吗?[从上一条评论继续]如果你只使用盐和值的哈希,那么其他任何人都可以使用相同的值或不同的值重新创建相同的哈希。通过包含一个只有您和收件人服务知道的密钥,您可以验证来自知道该密钥的一方的消息。或者假设salt就像密钥一样,双方在传输之外都知道它,因此中间的人不会知道它?如果对话的一端是浏览器,这将很难实现,不是吗?[继续,再次]或者,如果您需要任何人能够确认签名值来自当前脚本,而不是连接的另一端,您可以将数字签名与公钥一起使用(对于共享密钥,任何一方都可以创建MAC,双方都需要共享密钥来验证MAC,但是对于数字签名,签名者需要公钥和私钥,验证者只需要公钥)
$a = $_GET['a'];
$b = $_GET['b'];

$hash = sha1($salt.$a.$b);

if ($_GET['hash'] == $hash) {
  //data ok
} else {
  // data has been tampered with
}