Php 如何使用zend使后端和URL更安全?

Php 如何使用zend使后端和URL更安全?,php,security,magento,zend-framework,Php,Security,Magento,Zend Framework,我正在尝试用Zend制作一个后端,我想知道是否有任何方法可以使它更安全,是否有任何特殊的框架可以使用?我读到我可以使用: 这有多安全?我以前使用过spring安全性,它总是非常有效,有没有类似于zend的工作?这些选项行吗 我还检查了magento,例如,URL是这样的 index/key/8555b140ead18e6c004037e5c82d6478/ 这就是url,如果我想进入catalogo,依此类推,他们只更改密钥,而不是更改控制器名称的url,出于安全原因,该密钥是路由吗?或者是由

我正在尝试用Zend制作一个后端,我想知道是否有任何方法可以使它更安全,是否有任何特殊的框架可以使用?我读到我可以使用:

这有多安全?我以前使用过spring安全性,它总是非常有效,有没有类似于zend的工作?这些选项行吗

我还检查了magento,例如,URL是这样的

index/key/8555b140ead18e6c004037e5c82d6478/
这就是url,如果我想进入catalogo,依此类推,他们只更改密钥,而不是更改控制器名称的url,出于安全原因,该密钥是路由吗?或者是由框架动态创建的?(据我所知,他们使用Zend)


谢谢。

该密钥的生成取决于您正在访问的路由以及每次会话重新启动时更改的随机字符串。
因此,每次登录都会获得不同的会话密钥。
这种方法的缺点是,你不能给别人一个管理员url并告诉他“嘿!看这里”,因为他们的会话密钥不同

如果要检查此功能是如何实现的,请查看
Mage\u Adminhtml\u Model\u Url::getUrl()
中的以下代码:

这是生成密钥的代码。深入了解
getSecretKey
方法,您将看到:

public function getSecretKey($controller = null, $action = null)
{
    $salt = Mage::getSingleton('core/session')->getFormKey();

    $p = explode('/', trim($this->getRequest()->getOriginalPathInfo(), '/'));
    if (!$controller) {
        $controller = !empty($p[1]) ? $p[1] : $this->getRequest()->getControllerName();
    }
    if (!$action) {
        $action = !empty($p[2]) ? $p[2] : $this->getRequest()->getActionName();
    }

    $secret = $controller . $action . $salt;
    return Mage::helper('core')->getHash($secret);
}
因此,密钥是从控制器名称、操作名称和通过这种方式生成的
Mage::getSingleton('core/session')->getFormKey()生成的
$salt
的哈希构建

getFormKey
方法如下所示(每个会话一个值):

public function getSecretKey($controller = null, $action = null)
{
    $salt = Mage::getSingleton('core/session')->getFormKey();

    $p = explode('/', trim($this->getRequest()->getOriginalPathInfo(), '/'));
    if (!$controller) {
        $controller = !empty($p[1]) ? $p[1] : $this->getRequest()->getControllerName();
    }
    if (!$action) {
        $action = !empty($p[2]) ? $p[2] : $this->getRequest()->getActionName();
    }

    $secret = $controller . $action . $salt;
    return Mage::helper('core')->getHash($secret);
}
public function getFormKey()
{
    if (!$this->getData('_form_key')) {
        $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
    }
    return $this->getData('_form_key');
}