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