Zend Framework - 将参数从视图传递到控制器的安全方法

时间:2011-01-30 22:48:28

标签: php zend-framework frameworks post parameter-passing

我使用Zend Framework接近3个月,我正在寻找一种方法,以安全的方式将参数从视图传递到控制器。我更喜欢传递像$ _POST方法这样的参数,但我不想使用表单。 在ZF中有什么方法可以使用吗?我只知道url()方法,但我不知道这个方法是否适用于将重要数据传递给控制器​​。

3 个答案:

答案 0 :(得分:5)

HTTP是一种无状态协议,您基本上可以从四种解决方案中选择以保留请求之间的信息(因为,我认为,您正在尝试做的事情,不是这样):

  • 查询字符串
  • 表格中的隐藏元素
  • 曲奇
  • 会话

会议将是最安全的。在ZF中,您有Zend_Session组件来帮助您进行会话管理。

就没有表格发送POST而言,这是相当困难的。看看:Zend Framework: How to POST data to some external page (e.g. external payment gate) without using form?。但是,如果您只想使用cURL在PHP中发送POST数据。

答案 1 :(得分:1)

我认为你可能正在寻找Session变量。

您想将从URL无法看到的内容发送到下一个请求中,对吧?会话非常适合。

<强>更新

我将您的问题读作: “页面中有这个变量,它会以某种方式发生变化。我希望用户将其发送到服务器,但它不应出现在URL中。但不使用表单。”

没有表格或javascript axaj调用,无法从浏览器发起POST请求(比如让用户发布密码或类似信息)。要通过POST发送一些数据,您可以使用Zend_Http_Client(),但这是在服务器端完成的,您仍然需要先发出GET请求。

我可以问你如何使用GET实现它?这将有助于我们了解您的确想做什么。

最后一个想法:

  

我正在寻找一种通过的方法   参数从视图到   控制器以安全的方式

只是因为它不在网址中而不安全!:)

答案 2 :(得分:1)

我认为您可以使用的是摘要密钥

该方法与安全性GET,POST,Cookies或Session无关,客户端的人可以操纵参数。

示例:

mywebsite.com/widget.php?id=1234&action=delete

一个人可以更改GET参数ID并删除他们想要的任何内容。显然,您的控制器应该实现Auth和ACL,以进行身份​​验证和授权,但这仍然不会阻止URL篡改。例如,什么是Bob登录并更改URL以编辑John的小部件。

通过将参数串联成一个字符串来生成摘要密钥:

1234+password = "1234password" then generate the MD5 of the result = d5b1ee4b463dc7db3b0eaaa0ea2cb5b4

沿着网址传递此内容。

mywebsite.com/widget.php?id=1234&action=delete&mac=d5b1ee4b463dc7db3b0eaaa0ea2cb5b4
在widget.php中,您可以使用相同的公式计算摘要密钥并检查它是否匹配。如果他们尝试将ID更改为4567,则MD5结果将为09fef3620249f28ae64adc23bded949,因此您可以拒绝该请求。

如果您的URI上有超过1个参数,请将它们串在一起,添加密码并生成MD5或SHA1。