2014-09-22 62 views
0

过滤问题在帐户表单字段或名和姓用户注册页面的表单字段,当我把下面的JS代码:表单字段的Magento 1.8.1.0

<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管理,我不能,但iremove观察者时,我可以再次登录。

检查两个附加的屏幕截图。

Form fields where i entered js code

The alert message from the entered js code in the field

请帮助我解决这个问题。

谢谢

回答

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=""> 

要解决此问题,我已修改代码中的观察员如下:

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; 
    } 
} 

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

谢谢。