在getRefererUrl中调用htmlspecialchars的目的是什么?

时间:2012-12-04 22:55:19

标签: magento

我遇到了Magento中的一个错误,但我希望比我聪明的人能解释一下。

在VoteController.php中,函数addAction在其最后一行调用_redirectReferer。这样做的目的是在Magento投票中投票后将用户重定向回原始页面。

_redirectReferer调用_getRefererUrl,它从几个地方获取引用网址。此函数执行的最后一项操作是在URL字符串上调用escapeUrlescapeUrlhtmlspecialchars的包装器。

结果是example.com/?a=b&c=d之类的网址变为example.com/?a=b&c=d(注意破坏的&符号)。

在URL上调用htmlspecialchars的目的是什么?


资源

addAction:/ app/code/core/Mage/Poll/controllers/VoteController.php
_redirectReferer_getRefererUrl:/ app/code/core/Mage/Core/Controller/Varien/Action.php
escapeUrl:/ app/code/core/Mage/Core/Helper/Abstract.php

1 个答案:

答案 0 :(得分:4)

背景: &是&符号所需的html实体表示;否则浏览器会假设源中的&后面的任何内容都是实体表示。参考http://www.w3.org/QA/2005/04/php-session#background

每当呈现URL时这都很好,但是当在服务器端计算重定向并将其应用于响应对象时,这是不理想的。因此这是一个错误,并且是一个很好的借口来重写core/data助手,以便以正确的方式逃避。

POC对于任何懒得的人:-)来设置民意调查:

<?php
include 'app/Mage.php';
Mage::app();

$p = Mage::app()->getRequest()->getParams();

if (empty($p)) {
    $refererUrl = Mage::app()->getRequest()->getServer('HTTP_REFERER').'?foo=bar&baz=bip';
    $refererUrl = Mage::helper('core')->escapeUrl($refererUrl);
    Mage::app()->getResponse()->setRedirect($refererUrl);
    Mage::app()->getResponse()->sendResponse();
    exit;
}

var_dump($p);