Frage

Gibt es einen eingebauten Magento-Helfer, der ausgegebene Vorlagendaten entgeht, um XSS zu verhindern?

Oder sollte ich einfach den PHP verwenden htmlspecialchars oder htmlentities Funktionen?

War es hilfreich?

Lösung

Abhängig vom Kontext gibt es mehrere Helfermethoden. Alle sind definiert in Mage_Core_Helper_Abstract aber auch in Mage_Core_Block_Abstract, so können Sie sie mit verwenden $this->...() In jeder Vorlage:

  • escapeHtml(): Es nutzt tatsächlich htmlspecialchars Mit den empfohlenen Parametern, um HTML zu entkommen: $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false); - Außerdem können Sie einen Whitelist zulässigen Tags angeben und die Methode auf einem Array aufrufen, um allen Elementen gleichzeitig zu entkommen. Verwenden Sie dies für einen Inline -Text.
  • quoteEscape(): Eine einfachere Version ohne Whitelist und Array -Verarbeitung, aber dieser entgeht einzelner Zitate sowie doppelte Zitate, nützlich für Text innerhalb eines HTML -Attributs.
  • jsQuoteEscape(): Dieser entgeht mit einem Backslash einzelne Zitate. Es wird verwendet, um String -Literalen in JavaScript zu entkommen. Aber das ist nicht sicher. (Beispiel von @xorax: 'test\\\'+alert("powned");//'). Eine zusätzliche Flucht von Rücklauf ist erforderlich. Verwenden quoteEscape() stattdessen!
  • escapeUrl(): Ich weiß nicht, warum diese Methode existiert, es ist nicht URL codierende Saiten, es ist einfach nur alt htmlspecialchars() ohne Parameter. Verwenden Sie es nicht. Je.

    /**
     * Escape html entities in url
     *
     * @param string $data
     * @return string
     */
    public function escapeUrl($data)
    {
        return htmlspecialchars($data);
    }
    
  • In einem verwandten Hinweis gibt es urlEncode() Was auch nicht URL -Codierung anwendet, sondern Base64 stattdessen ... Verwenden Sie es nicht, wenn Sie nicht genau wissen, was Sie brauchen.

    /**
     *  base64_encode() for URLs encoding
     *
     *  @param    string $url
     *  @return   string
     */
    public function urlEncode($url)
    {
        return strtr(base64_encode($url), '+/=', '-_,');
    }
    

Ja, die Benennung ist inkonsistent. Sobald alle diese Methodamen dem Schema verfolgten somethingEscape() Aber dann beschloss jemand zu verabreicht htmlEscape() und urlEscape() zugunsten der neuen Methoden und vergessen quoteEscape() und jsQuoteEscape().

Andere Tipps

Übersetzen Sie es einfach

Sie sollten immer die Standard -Übersetzungsfunktion verwenden

In einer Blockinstanz

<?php echo $this->__('Text goes here'); ?>

Irgendwo anders

<?php echo Mage::helper('core')->__('Text goes here'); ?>

Und benutze es genauso wie du benutzst sprintf mit PHP

Z.B.

<?php $foo = 'rocks'; ?>
<?php echo $this->__('Sonassi %s', $foo); ?>

Oder entkommen

In einer Blockinstanz

<?php echo $this->escapeHtml('HTML goes here'); ?>

Irgendwo anders

Verwendung Mage/Core/Helper/Abstract.php

escapeHtml($data, $allowedTags = null)

Z.B.

<?php echo Mage::helper('core')->escapeHtml('HTML goes here'); ?>

Klassen Mage_Core_Block_Abstract und Mage_Core_Helper_Abstract Beide verwenden dieselbe Funktion Mage_Core_Helper_Abstract::escapeHtml Die Implementierung intern wird die Funktion der PHP -HTMLSpecialChars -Funktion verwendet und einige aditionelle Logik für Arrays mit HTML -Inhalten implementieren.

Auf die Funktion kann in allen Block- und Helferklassen über $ this zugegriffen werden. Da die Funktion öffentlich ist, können Sie sie über Mage :: Helfer ('Core') oder eine andere Helferklasse überall sonst verwenden.

Für spanische Konvertiten:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top