Magento 1.8.1.0中的表单字段过滤问题

时间:2014-09-22 07:07:41

标签: magento magento-1.8

在首字母和姓氏的帐户表单字段或用户注册页面表单字段中,当我放置以下JS代码时:

<script>alert("Here")</script>

保存并在页面加载时运行。这很奇怪,因为我检查了模板文件并且值被转义如下:

<?php echo $this->escapeHtml($this->getObject()->getFirstname()) ?>

我还通过更改字段标签来确认我是否在正确的模板文件中。 我已经阅读了以下问题,并试图使用它们,但没有为我工作。

https://magento.stackexchange.com/questions/569/how-to-escape-output-data

https://magento.stackexchange.com/questions/8179/is-there-a-generic-way-i-can-apply-input-filtering-to-magento-form-processing

关于观察者方法,它可以工作,但是当我尝试登录magento admin时,我不能,但是当我移除观察者时,我可以再次登录。

查看附带的两个截图。

Form fields where i entered js code

The alert message from the entered js code in the field

请帮我解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

我创建了一个观察者。对于管理员和前端的登录表单(可能是其他一些表单),用户名和密码的表单字段格式如下:

<input type="text" id="username" name="login[username]" value="" class="required-entry input-text">

<input type="password" id="login" name="login[password]" class="required-entry input-text" value="">

要解决此问题,我已在observer中修改了代码,如下所示:

 public function sanitizeParams($observer)
{
    if(!Mage::app()->getStore()->isAdmin())
    {
        $post = Mage::app()->getRequest()->getParams();
        foreach($post as $pkey => $pvalue)
        {
            if(is_array($post[$pkey]))
            {
                foreach($post[$pkey] as $key => $value)
                {
                    $post[$pkey][$key] = filter_var($value, FILTER_SANITIZE_SPECIAL_CHARS);
                }
            }
            else
            {
                $post[$pkey] = filter_var($pvalue, FILTER_SANITIZE_SPECIAL_CHARS);
            }
        }

        $_POST = $post;
    }
}

它解决了我的问题,现在工作正常。

感谢。