Codeigniter 2.0.2, TinyMCE lub CKEditor – atrybut style usuwa się po zatwierdzeniu formularza

Jeśli korzystasz z WYSIWYG TinyMCE lub CKEditor oraz z framework’a CodeIgniter w wersji >2.0, możesz natrafić na problem znikających styli. 

Nadajesz styl np. <span style=”color:blue;”></span> zatwierdzasz formularz i w efekcie otrzymujesz <span></span>.

Gdzie się podział style=”” ?

Zapewne masz włączoną opcję w config.php :

$config['global_xss_filtering'] = TRUE;

Po wyłączeniu globalnego filtrowania nasze WYSIWYG nie tracą już żadnych styli. 

Osobiście nie chcialam wyłączać tej ocpji więc zrobiłam obejście ;o) 

Edytowane – na podstawie sugestii Bart’a żeby nie mieszać w plikach źródłowych ;o)

Po coś to zabezpieczenie zostało dodane, tak więc aby się go całkiem nie pozbywać utworzyła tablicę w której przechowywane są adresy dla których tag style ma nie być usuwany.

Należy utworzyć plik MY_Security.php jako rozszerzenie orginalnej klasy Security i dodać zmodyfikowaną funkcję _remove_evil_attributes.

protected function _remove_evil_attributes($str, $is_image){
  // All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns
  $allowed = array("adresy dla których style ma nie być usuwany bez domeny na przykład '/admin/edittext/'");
  if(in_array($_SERVER['REQUEST_URI'],$allowed)){
    $evil_attributes = array('on\w*', 'xmlns');
  }else{
    $evil_attributes = array('on\w*', 'style', 'xmlns');
  }

  if ($is_image === TRUE){
    /*
    * Adobe Photoshop puts XML metadata into JFIF images, 
    * including namespacing, so we have to allow this for images.
    */
    unset($evil_attributes[array_search('xmlns', $evil_attributes)]);
  }

  do {
    $str = preg_replace(
      "#<(/?[^><]+?)([^A-Za-z\-])(".implode('|', $evil_attributes).")(\s*=\s*)([\"][^>]*?[\"]|[\'][^>]*?[\']|[^>]*?)([\s><])([><]*)#i",
      "<$1$6",
      $str, -1, $count
    );
  } while ($count);
  return $str;
}

I to wszystko.

pobierz MY_SECURITY.php

0 0 vote
Article Rating