我的问题是如何在我的表单上使用PRG模式时在重定向期间保留数据。具体来说,我想在电子商务应用程序中使用它。我有三个选项可以通过重定向存储数据,我对每个选项都有顾虑。我希望你们能帮我解决这个问题:
我可以将数据存储为URL中传递的加密字符串。这很棒,因为我不需要存储信用卡信息,但我担心(也许我错了)Google Analytics可能会导致信用卡信息被编入索引并显示在搜索结果中。希望我在这个问题上错了,并且可以使用这种方法,因为它是最简单的。
我可以将数据存储在会话中,但我担心一些用户因为禁用cookie而无法使用会话,这会限制应用程序的实用性。此外,我会在会话中存储加密的信用卡信息,PCI Compliance表示我不允许在任何情况下存储CVV。
我可以将数据存储在数据库中,这样可以解决我对会话的兼容性问题 - 但我仍然面临着在任何情况下都不允许存储CVV号码的问题。
使用PRG模式时,通过URL传递信息似乎是最好的方法。我只是担心页面中的Google Analytics可能会将URL中的查询字符串编入索引。即使查询是加密且不可读的信用卡信息形式,我仍然不希望它出现在任何事情上。希望我认为Analytics会存储和索引这些信息是不正确的。
请指教,谢谢你的帮助。
答案 0 :(得分:1)
Ley说你通过网址传递了信用卡信息。
抓取工具可以使用CVV索引页面的唯一方法是,如果用户在发布提交后以某种方式泄露,则将用户重定向到的URL。您说您加密了URL中传递的信用卡信息,但是如何完成此操作的详细信息至关重要。
如果您只使用相同的密钥加密所有内容,并在请求页面时解密URL信息并将其显示给用户进行确认,那肯定是不够的。例如,它仍然是不够的允许该确认页面只显示一次 - 因为没有那么多的CVV号码,任何用户都可以轻松尝试所有组合并查看它们加密的内容。所以我甚至没有考虑复杂的密码学解决方案。
我认为可以做到这一点的一种可能方式是生成一个长随机密钥(或者只要你正在加密的信息;因为它不是那么多数据,你可以在这种情况下使用对称加密),加密使用该密钥的数据,并将该密钥设置为客户端上的安全且短暂的cookie(当然,全部通过https)。这样,即使URL泄露,只有该用户才能解密信用卡信息。
这也解决了您可能在Web服务器中记录请求的问题;由于很少记录cookie,因此检查日志也不足以检索信用卡信息。
答案 1 :(得分:0)
针对您要传递此信息的网页停用Google Analytics,并确保您在拥有该信息的所有网页上拥有证书。这也是值得你使用一些基本加密的原因。
如果您要发送网址,可以执行以下操作,它会为您提供额外的安全保障:
$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;