Domanda

C'è un aiutante built-in Magento per sfuggire dati del modello emessi per evitare XSS?

O devo solo usare il PHP htmlspecialchars o funzioni htmlentities ?

È stato utile?

Soluzione

Ci sono diversi metodo di supporto a seconda del contesto. Tutti sono definiti in Mage_Core_Helper_Abstract ma anche in Mage_Core_Block_Abstract, in modo da poter usarli con $this->...() in ogni template:

  • escapeHtml(): In realtà sfrutta htmlspecialchars con i parametri consigliati per sfuggire HTML: $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false); - inoltre è possibile specificare una whitelist di tag permessi e chiamare il metodo su un array di fuggire tutti gli elementi in una sola volta. Usa questo per qualsiasi testo in linea.
  • quoteEscape(): una versione più semplice, senza whitelist e l'elaborazione di array ma questo sfugge virgolette singole e doppie virgolette, utili per testo all'interno di un attributo HTML
  • .
  • jsQuoteEscape(): questo sfugge virgolette singole con un backslash. E 'utilizzato per fuggire letterali stringa in JavaScript. Ma questo è non sicuro . (Esempio da @Xorax: 'test\\\'+alert("powned");//'). Ulteriori fuga di backslash è necessario. Usa quoteEscape() invece!
  • escapeUrl(): Non so il motivo per cui questo metodo esiste, di non URL codifica stringhe, è solo vecchio htmlspecialchars() pianura senza alcun parametro. Non usarlo. Mai.

    /**
     * Escape html entities in url
     *
     * @param string $data
     * @return string
     */
    public function escapeUrl($data)
    {
        return htmlspecialchars($data);
    }
    
  • In una nota correlata, c'è urlEncode() che, inoltre, non si applica la codifica URL, ma base64 invece ... non lo usate, se non si sa esattamente quello che ti serve.

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

Sì, la denominazione è incoerente. Una volta che tutti i nomi dei metodi stavano seguendo la somethingEscape() schema, ma poi qualcuno ha deciso di htmlEscape() deprecate e urlEscape() a favore dei nuovi metodi e dimenticati di quoteEscape() e jsQuoteEscape().

Altri suggerimenti

Just tradurlo

Si dovrebbe sempre utilizzare lo standard funzione translate

In un'istanza di blocco

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

In qualsiasi altro luogo

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

E usarlo allo stesso modo si usa sprintf con PHP

Eg.

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

O sfuggire

In un'istanza di blocco

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

In qualsiasi altro luogo

Utilizzando Mage/Core/Helper/Abstract.php

escapeHtml($data, $allowedTags = null)

Eg.

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

Classi Mage_Core_Block_Abstract e Mage_Core_Helper_Abstract utilizzano entrambi la stessa funzione Mage_Core_Helper_Abstract::escapeHtml e di implementazione utilizza internaly funzione PHP htmlspecialchars inoltre attuare una logica aditional per array con contenuto HTML.

La funzione è accessibile in tutte le classi di blocco e di supporto attraverso $ questo e dato che la funzione è pubblica si può utilizzare attraverso Mage :: helper ( 'core'), o di qualche altra classe di supporto, ovunque.

Per convertire spagnolo:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top