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