如何在cakephp 3.6.7中的链接中隐藏传递的值?

时间:2018-08-03 09:41:53

标签: php cakephp cakephp-3.0

任何人都可以告诉隐藏传递的值。

这是一个链接

echo $this->Html->link(__(‘Edit’, true), array(‘action’=>‘edit’, $loggeduser[‘id’])) ;

显示的网址是:

http://localhost/cakeapp/authexs/edit/83

我想隐藏 83 ,请帮助我。

3 个答案:

答案 0 :(得分:1)

如果要将$ loggeduser ['id']作为链接发送,则不能将其隐藏。除了隐藏外,您可以对其进行加密,然后通过在编辑操作中对其进行解密来使用它。

// Assuming key is stored somewhere it can be re-used for
// decryption later.
$key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
$id = Security::encrypt($loggeduser[‘id’], $key);

echo $this->Html->link(__(‘Edit’, true), array(‘action’=>‘edit’, $id)) ;

以及您的修改操作

public function edit($id = null) {
 if ($id !=  null) { 
   $key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
   $id = Security::decrypt($cipher, $key);
  }
}

答案 1 :(得分:0)

您在这里有两个选择:

1)按照@Sehdev的建议对ID进行加密-然后解密以获取代码中的ID

2)将链接替换为包含ID为83的隐藏输入的表单,该表单将向/cakeapp/authexs/edit提交POST请求。然后,您可以在编辑操作中检查请求数据中是否存在ID字段(请参阅Cake2 Docs,以从控制器读取请求数据)

使用Cakes Form Helper,表单可能看起来像这样:

echo $this->Form->create('Authex', ['action' => 'edit']);
echo $this->Form->input('id', ['type' => 'hidden', 'value' => $loggeduser[‘id’]]);
echo $this->Form->submit();
echo $this->Form->end();


重要提示

我正在努力了解您为什么要在EDIT表单中隐藏ID。如果您担心用户可能会猜到另一个用户ID,那么您将遇到一个重大的安全漏洞,因为您应该在控制器级别实施授权检查,以防止未经授权的访问。

答案 2 :(得分:0)

假设您可以在编辑功能本身中访问$loggeduser数据,那么您根本无法在URL中完全传递ID,而此时只能从$loggeduser获取ID。也就是说,您的URL为/authexs/edit,它将始终编辑当前用户。当然,您也可以在其中允许一个可选的ID,并且仅当$loggeduser为空时才使用,以允许管理员编辑其他用户。正如@JoeRushton所说,您需要确保对允许的安全性进行检查。