Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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 后重定向获取模型-数据存储方法;PCI合规性_Php_Pci Dss_Post Redirect Get - Fatal编程技术网

Php 后重定向获取模型-数据存储方法;PCI合规性

Php 后重定向获取模型-数据存储方法;PCI合规性,php,pci-dss,post-redirect-get,Php,Pci Dss,Post Redirect Get,我的问题是在表单上使用PRG模式时,如何在重定向期间保留数据。具体来说,我想在电子商务应用程序中使用它。我有三种通过重定向存储数据的方法,我对每种方法都有顾虑。我希望你们能帮助我解决这个问题: 1.)将数据存储在URL字符串中 我可以将数据存储为URL中传递的加密字符串。这很好,因为我不必存储信用卡信息,但我担心(也许我错了)谷歌分析可能会导致信用卡信息被编入索引并显示在搜索结果中。希望我在这个问题上是错的,并且可以使用这个方法,因为它是最简单的 2.)在会话中存储数据 我可以将数据存储在会话中

我的问题是在表单上使用PRG模式时,如何在重定向期间保留数据。具体来说,我想在电子商务应用程序中使用它。我有三种通过重定向存储数据的方法,我对每种方法都有顾虑。我希望你们能帮助我解决这个问题:

1.)将数据存储在URL字符串中 我可以将数据存储为URL中传递的加密字符串。这很好,因为我不必存储信用卡信息,但我担心(也许我错了)谷歌分析可能会导致信用卡信息被编入索引并显示在搜索结果中。希望我在这个问题上是错的,并且可以使用这个方法,因为它是最简单的

2.)在会话中存储数据 我可以将数据存储在会话中,但我担心一些用户将无法使用会话,因为cookie被禁用,这将限制应用程序的实用性。此外,我将在会话中存储加密的信用卡信息,PCI Compliance表示,在任何情况下都不允许我存储CVV

3.)将数据存储在数据库中 我可以将数据存储在数据库中,这将解决我与会话的兼容性问题——但我仍然面临着在任何情况下都不允许存储CVV号码的问题

在使用PRG模式时,通过URL传递信息似乎是最好的方法。我只是担心页面中的Google Analytics可能会在URL中索引查询字符串。即使查询是一种加密的、不可读的信用卡信息,我仍然不希望它出现在任何东西上。希望我认为分析会存储和索引这些信息是错误的


请告知,谢谢您的帮助。

Ley说您通过URL传递信用卡信息

爬虫用CVV索引页面的唯一方法是,用户在提交帖子后被重定向到的URL不知何故泄露。您说您对URL中传递的信用卡信息进行了加密,但如何进行加密的细节至关重要

如果您只是使用相同的密钥加密所有内容,并在请求页面时解密URL信息并将其显示给用户确认,那么这肯定是不够的。例如,仅允许确认页面显示一次仍然不够——因为没有那么多CVV号码,任何用户都可以简单地尝试所有组合,并查看它们的加密目的。所以我甚至没有考虑复杂的密码分析解决方案

我认为可以这样做的一种可能方式是生成一个长随机密钥(或者只要您正在加密的信息;因为它没有那么多数据,在这种情况下您可以使用对称加密),使用该密钥加密数据,并将该密钥设置为客户端上的安全和短期cookie(当然是通过https)。这样,即使URL泄漏,也只有该用户才能解密信用卡信息


这也解决了您可能在web服务器中记录请求的问题;由于很少记录cookies,因此对日志的检查也不足以检索信用卡信息。

Ley说您通过URL传递信用卡信息

爬虫用CVV索引页面的唯一方法是,用户在提交帖子后被重定向到的URL不知何故泄露。您说您对URL中传递的信用卡信息进行了加密,但如何进行加密的细节至关重要

如果您只是使用相同的密钥加密所有内容,并在请求页面时解密URL信息并将其显示给用户确认,那么这肯定是不够的。例如,仅允许确认页面显示一次仍然不够——因为没有那么多CVV号码,任何用户都可以简单地尝试所有组合,并查看它们的加密目的。所以我甚至没有考虑复杂的密码分析解决方案

我认为可以这样做的一种可能方式是生成一个长随机密钥(或者只要您正在加密的信息;因为它没有那么多数据,在这种情况下您可以使用对称加密),使用该密钥加密数据,并将该密钥设置为客户端上的安全和短期cookie(当然是通过https)。这样,即使URL泄漏,也只有该用户才能解密信用卡信息


这也解决了您可能在web服务器中记录请求的问题;由于很少记录Cookie,因此对日志的检查也不足以检索信用卡信息。

对要传递此信息的页面禁用谷歌分析,并确保所有包含此信息的页面都有证书。它可能也值得你使用一些基本的加密

如果您要发送URL,您可以这样做,它将为您提供一个额外的安全层:

$text   =   '464945645667567564564';
$key    =   'highlysecurkeyhere';

// step 1: encrypt (you can then send this through _GET as urlencoded)
$iv         =   mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
$encrypted  =   mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);
$encrypted  =   urlencode($encrypted);

// Recieving end, decoe then decrypt.
$output = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, urldecode($encrypted), MCRYPT_MODE_CFB, $iv);
echo $output;

对您要传递此信息的页面禁用谷歌分析,并确保您在所有包含此信息的页面上都有证书。它可能也值得你使用一些基本的加密

如果您要发送URL,您可以这样做,它将为您提供一个额外的安全层:

$text   =   '464945645667567564564';
$key    =   'highlysecurkeyhere';

// step 1: encrypt (you can then send this through _GET as urlencoded)
$iv         =   mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
$encrypted  =   mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);
$encrypted  =   urlencode($encrypted);

// Recieving end, decoe then decrypt.
$output = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, urldecode($encrypted), MCRYPT_MODE_CFB, $iv);
echo $output;
阿特,谢谢你的建议。我使用的加密方式使得相同的post数据每次看起来都不一样,具有相同的密钥,但每次加密都有一个唯一的iv。我添加了使用会话的同步令牌模式,因此任何显示格式良好的URL的人都将被拒绝,因为他们缺少适当的会话。仍然担心Google Analytics会自动为我的页面编制索引,而不是爬虫(不确定Analytics是否会这样做)。再次感谢,阿特,谢谢你,太好了