Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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
使用javascript/php进行简单的数据加密_Php_Javascript_Mysql - Fatal编程技术网

使用javascript/php进行简单的数据加密

使用javascript/php进行简单的数据加密,php,javascript,mysql,Php,Javascript,Mysql,我正在将我的访客从结账页面转发到/store/order/view/?id=735,但我不希望他们只能查看任何人的订单,因此我需要加密735。要做到这一点,Javascript可以加密,PHP/MySQL可以解密,最好的方法是什么 如果不使用?id=735 I do?key=735-[TIMESTAMP\u ORDER\u WAS\u PLACED],您认为这足够安全吗?不要这样做,保护it服务器端的安全始终,如果您使用JavaScript,没有什么是安全的-相反,它很容易被破坏 通过会话或任何

我正在将我的访客从结账页面转发到
/store/order/view/?id=735
,但我不希望他们只能查看任何人的订单,因此我需要加密735。要做到这一点,Javascript可以加密,PHP/MySQL可以解密,最好的方法是什么


如果不使用?id=735 I do
?key=735-[TIMESTAMP\u ORDER\u WAS\u PLACED]
,您认为这足够安全吗?

不要这样做,保护it服务器端的安全始终,如果您使用JavaScript,没有什么是安全的-相反,它很容易被破坏


通过会话或任何您想要的机制,服务器不应该向任何不能看到订单页面的人提供订单页面。

这是错误的方法。您应该确保没有用户可以访问不属于他的页面/记录(服务器端)。在客户端执行此操作不会提供任何安全性。请记住,任何人都可以阅读您的JavaScript,从而可以做任何他想做的事情(当您确切地知道某些内容是如何编码的时候,破坏加密系统是非常容易的)。不要这样做,请使用基于服务器端会话的有效负载安全系统。这样会安全得多。

为什么不这样做,以便只有与相关订单相关联的登录访问者才能看到此页面


这将是一种更安全的方法,尝试混淆订单ID。

而不是加密订单ID是否可以使用会话或post变量?正确实现,特别是会话,将比在querystring上传递变量更安全。一般来说,所有安全性都应由服务器处理,而不是由调用客户端处理。让客户完成这项工作将以眼泪告终

但是,如果您确实沿着查询字符串路径,并假设您正在使用PHP中的链接生成页面,那么您可以使用PHP中的mcrypt_encrypt/mcrypt_dencrypt函数创建链接,然后在收到请求时解密


也就是说,您仍然需要一个唯一的加密密钥来加密/解密,这就是PHP会话id。

如果您的用户没有登录,您可以使用会话,或者使用一个适当长的随机生成的id

前者的缺点是可能超时,后者的缺点是其他人可能能够查看订单,但除非用户以某种方式传播URL(例如,这可能包括将其保留在公用计算机的浏览器历史记录中),否则这种情况不应发生。

一些选项(从最低到最高)和想法:

选项1)您可以使用某种不太容易猜测的散列,而不是orderid。这仍然是不安全的,它只是使身份证更难猜测

选项2)您可以将会话id与存储在用户计算机上的cookie一起使用。这仍然有问题,因为您现在将该订单的查看限制在一台计算机上。但至少它更安全一点

选项3)作为结帐过程的一部分,您还可以为用户“伪造”帐户。作为流程的一部分,请确保收集他们的电子邮件地址。订单完成后,向他们发送一封电子邮件,其中包含随机密码(与订单一起存储)和查看订单的链接。这仍然不够理想,因为电子邮件不是密码的安全传输机制

选项4)使用户拥有与订单关联的适当帐户

即使订单是通过某种密码机制保护的,您仍然应该通过某种散列来隐藏任何订单url。我建议:

md5(order_id + time() + random_salt_value)

最后,在服务器端执行所有这些操作。javascript生成的任何内容都必须被视为“来自用户的输入”,并且永远不能完全信任。如果你必须有一个基于javascript的工作流,那么所有这一切都要有ajax端点。

我们不想要求用户登录,但我真的,真的建议你重新考虑一下。这不是必需的,只是不引人注目地识别用户,并显示他们各自的ordersobusation!=安全性。@middaparka:这正是我读到这个问题时的想法!;)@难以捉摸-我敢说它“足够好”,直到有人想出如何解码它,然后就太晚了。:-)@米德帕卡:对。而且它很容易解码,因为JavaScript部分是公共的。