Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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 如何隐藏url的参数_Php_Magento - Fatal编程技术网

Php 如何隐藏url的参数

Php 如何隐藏url的参数,php,magento,Php,Magento,我在网站上用一个简单的整数生成URL,允许用户查看过去的订单 http://site.com/order_id/145323 问题是,只需更改该数字,然后查看其他人的订单是非常容易的。我想知道在url中对这个数字进行编码,然后让php解码以便运行控制器的简单方法是什么?它不必是超级安全的,因为有些东西会让人不那么容易改变号码来查看数据。我试过这样做: order\u id/ 然后在控制器操作中,我尝试: if($orderId = (int) $this->getRequest()->

我在网站上用一个简单的整数生成URL,允许用户查看过去的订单

http://site.com/order_id/145323

问题是,只需更改该数字,然后查看其他人的订单是非常容易的。我想知道在url中对这个数字进行编码,然后让php解码以便运行控制器的简单方法是什么?它不必是超级安全的,因为有些东西会让人不那么容易改变号码来查看数据。我试过这样做:

order\u id/

然后在控制器操作中,我尝试:

if($orderId = (int) $this->getRequest()->getParam('order_id') && Mage::getSingleton('customer/session')->isLoggedIn()){         
        $orderId = (int) $this->getRequest()->getParam('order_id'); 
        $orderId = base64_decode($orderId); 
        $order = Mage::getModel('sales/order')->load($orderId);
        Mage::register('current_order', $order);
        $this->loadLayout();
        $this->renderLayout();
    }

但这不起作用。在url中隐藏此参数的好方法是什么?

您做错了。不要试图掩盖
id
,只需确保
id
属于用户(在后端检查)


如果id不属于该用户,则返回状态代码
403禁止
,或者干脆返回
404未找到

您做错了。不要试图掩盖
id
,只需确保
id
属于用户(在后端检查)


如果该id不属于该用户,则返回状态代码
403禁止
或简单地
404未找到

如果是关于人员和订单的,您将拥有一个用户表或数据存储,当解析随机url时,检查订单号是否属于当前登录的用户,如果是,允许数据,如果不允许,返回“未经授权,请登录”

编辑

我不确定你们的系统需要什么,但纯粹基于假设,这可能是有用的

我假设是用户下的订单。所以我还假设有一个ORDERS表,所有的订单都存储在这个表中并从中获取

在ORDERS表中,您应该存储下订单的用户,例如

USERS table
----------
user_id, username, password, full name, dob, etc

ORDERS table
----------
order_id, order_type, quantity, date_ordered, user_id
因此,您可以使用SQL查询来获取与订单关联的用户

类似于
SELECT username FROM users JOIN orders ON users.user\u id=orders.uder\u id

然后对照当前登录的用户检查返回的用户名


如果我侮辱了你的智慧,我很抱歉,但我不确定你到底在追求什么

当然,如果是关于人员和订单的,您将拥有一个用户表或数据存储,在解析随机url时,检查该订单号是否属于当前登录的用户,如果是,则允许数据,如果不是,则返回“未经授权,请登录”

编辑

我不确定你们的系统需要什么,但纯粹基于假设,这可能是有用的

我假设是用户下的订单。所以我还假设有一个ORDERS表,所有的订单都存储在这个表中并从中获取

在ORDERS表中,您应该存储下订单的用户,例如

USERS table
----------
user_id, username, password, full name, dob, etc

ORDERS table
----------
order_id, order_type, quantity, date_ordered, user_id
因此,您可以使用SQL查询来获取与订单关联的用户

类似于
SELECT username FROM users JOIN orders ON users.user\u id=orders.uder\u id

然后对照当前登录的用户检查返回的用户名


如果我侮辱了你的智慧,我很抱歉,但我不确定你到底在追求什么

正如其他人所说,解决此问题的最佳方法是修改您访问数据的方式,并检查请求中的订单号是否链接到试图访问数据的用户

但是,如果您需要一个非常快速的修复,您可以检查请求的HTTP\u REFERER是否已设置。如果它被设置好了,并且指向你网站上的一个页面,那么你可以合理地确定这是一个合法的请求。如果用户通过修改订单号修改了URL,则HTTP\U REFERER将为空


这不是一个完美的解决方案,但它肯定会阻止人们浏览他们不应该浏览的订单。

正如其他人所说,解决这一问题的最佳方法是修改您访问数据的方式,并检查请求中的订单号是否链接到试图访问它的用户

但是,如果您需要一个非常快速的修复,您可以检查请求的HTTP\u REFERER是否已设置。如果它被设置好了,并且指向你网站上的一个页面,那么你可以合理地确定这是一个合法的请求。如果用户通过修改订单号修改了URL,则HTTP\U REFERER将为空


这不是一个完美的解决方案,但它肯定会阻止人们浏览他们不应该浏览的订单。

同意PeeHaa的观点,并想补充一点,base64并不是一个很模糊的问题。大多数半技术型的人都能识别base64字符串(在2/3的情况下,结尾处的“=”填充通常是免费的)。我知道这不是一个很好的解决方案,也不容易破解,但比现在的更好。如果我知道怎么做,我会做PeeHaas解决方案,但我不知道从哪里开始运行这样的检查,我需要尽快得到一个临时修复。除了有点高级别的错误,你的方法似乎可以实现你想要的。为什么不行?嗨,艾伦,是的,我对我的解决方案感到尴尬。我手头拮据。我得到了它的工作,但我正试图找出一个更好的方法。同意PeeHaa,并想补充一点,base64不是一个很大的模糊。大多数半技术型的人都能识别base64字符串(在2/3的情况下,结尾处的“=”填充通常是免费的)。我知道这不是一个很好的解决方案,也不容易破解,但比现在的更好。如果我知道怎么做,我会做PeeHaas解决方案,但我不知道从哪里开始运行这样的检查,我需要尽快得到一个临时修复。除了有点高级别的错误,你的方法似乎可以实现你想要的。为什么不行?嗨,艾伦,是的,我是emba