1

Magentoでバグのように見えるものに遭遇しましたが、私より賢い人がこれを説明できることを望んでいます。

VoteController.phpでは、関数はその最後の行をaddAction呼び出します。_redirectRefererこれの目的は、Magentoの投票に投票した後、ユーザーを元のページにリダイレクトすることです。

_redirectRefererを呼び出します_getRefererUrl。これは、いくつかの場所から参照URLを取得します。この関数が最後に行うことの1つはescapeUrl、URL文字列を呼び出すことです。 escapeUrlのラッパーですhtmlspecialchars

結果は次のようなURLに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

4

1 に答える 1

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);
于 2012-12-04T23:36:58.077 に答える