Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter]CKEditor i Codeigniter
Forum PHP.pl > Forum > PHP > Frameworki
webmaniak
Witam,
mam kolejny problem z codeigniterem, tym razem wiąże się to z ckeditorem. Mianowicie ckeditor usuwa mi style, czyli jak wspiszę: <div style="font-size: 14px"> - to po zapisaniu mam sam div. "Wyguglowałem" że rozwiązaniem jest:

  1. $config['global_xss_filtering'] = FALSE;


Jednak jest to zabezpieczenie przed XSS, tu więc moje pytanie, jak bardzo moja (kiedyś) aplikacja straci na bezpieczeństwie, gdy to wyłączę?
Druga sprawa, znalazłem również kod żeby obejść grzebanie w configu:

  1. protected function _remove_evil_attributes($str, $is_image){
  2. // All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns
  3. $allowed = array("adresy dla których style ma nie być usuwany bez domeny na przykład '/admin/edittext/'");
  4. if(in_array($_SERVER['REQUEST_URI'],$allowed)){
  5. $evil_attributes = array('on\w*', 'xmlns');
  6. }else{
  7. $evil_attributes = array('on\w*', 'style', 'xmlns');
  8. }
  9.  
  10. if ($is_image === TRUE){
  11. /*
  12.   * Adobe Photoshop puts XML metadata into JFIF images,
  13.   * including namespacing, so we have to allow this for images.
  14.   */
  15. unset($evil_attributes[array_search('xmlns', $evil_attributes)]);
  16. }
  17.  
  18. do {
  19. $str = preg_replace(
  20. "#<(/?[^><]+?)([^A-Za-z\-])(".implode('|', $evil_attributes).")(\s*=\s*)([\"][^>]*?[\"]|[\'][^>]*?[\']|[^>]*?)([\s><])([><]*)#i",
  21. "<$1$6",
  22. $str, -1, $count
  23. );
  24. } while ($count);
  25. return $str;
  26. }


Niestety, w miejscu w którym znalazłem kod nie ma opisanego sposobu- przykładu jego wykorzystania, a próba kontaktu z autorem niestety się nie powiodła. Plik umieściłem w katalogu core w pliku MY_Security.php.
Nie ma tam przykładu użycia, a za bardzo nie wiem co wpisać jako $str i $is_image żeby to działało. Jako $str mam wpisać elementy jak np. div, span? a jako drugi parametr? Proszę o napisanie przykładu wykorzystania tego kodu osoby lepiej rozumiejące go.
szok
Nie straci na bezpieczeństwie jeśli dane z post będziesz pobierał tak:
$this->input->post('pole', TRUE);

webmaniak
No dobrze, a jakbym jednak nie chciał grzebać w configu i zostawić to xss na true, możesz napisać przykład wykorzystania tej metody? Jak i gdzie ją wczytać?
szok
Nie da się, jak masz ustawione na true, to CI zawsze będzie filtrował dane jakie przychodzą i bedzie ci cyrki w ckeditor.

Dobrą opcja jest napisać własną klasę input. Lub przekazywać dane czystym $_POST'em choć tu nie jestem pewien czy CI nie zamienia tej tablicy.
mieszkos
Dziwne macie rozwiązania, form_validation i po prostu nie robić xss_clean dla tego pola. chcesz to napisz to ci podpowiem 35138255
webmaniak
Problem rozwiązany. Zastosowałem metodę z pierwszego postu, tyle że w moim przypadku ckeditor jest ustawiony do edycji wpisów, a więc wpisywałem zły adres. Ostatecznie problem rozwiązałem usuwając id z $_SERVER['REQUEST_URI'], w innych przypadkach metoda będzie usuwać style, a więc będzie wygodnie i bezpiecznie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.