PHP5.4 и htmlspecialchars

Сюрпризец от разработчиков PHP

#1 3 сентября 2012 в 00:03
Что-то странно что народ молчит. scratchНе уж то не кто не использует PHP 5.4? shock
Ну а я вот обновил у себя на сервере PHP и заполучил глюк.
Так как никто мне не смог помочь — пришлось потратить выходные и разбираться самому. Постепенно локализуя проблему, выяснилось что причиной оказался сабж. cry
Погуглив — мои подозрения подтвердились тут и более простым языком тут.
#2 3 сентября 2012 в 00:15
Используемая мной версия InstantCMS — 1.9
Сервер на FreeBSD 9.0

В данной версии CMS нашлось 44 файла где используется данная функция.
Я уж подумал что придется менять во всех, но компьютерный бог был в этот раз на моей стороне и сжалился надо мной и оказалось что поправить нужно всего 4 файла:

admin/applets/components.php (49)
admin/applets/config.php (47,49,50,54)
admin/applets/users.php (182,247) (уже исправлено — 183,248)
includes/bbcode/bbcode.lib.php (921)
admin/components/price/backend.php (уже исправлено — 93)
В скобках — номера строк.

Странно, что в некоторых местах уже имеется "решение" данной проблемы — то есть кодеры более правильно использовали данную функцию.
Ну а там где не хватает третьего аргумента придеться править самостоятельно.

На примере файла — admin/applets/components.php

$link = htmlspecialchars($_REQUEST['link'], ENT_QUOTES);

Как_есть

$link = htmlspecialchars($_REQUEST['link'], ENT_QUOTES, 'cp1251');

Как_надо

После данных исправлений моя проблема решилась.
#3 3 сентября 2012 в 00:24
Как глобально (например через php.ini и без правки файлов CMS) исправить данную проблему я не нашёл. Да и не раз в интернете натыкался на то, что этого сделать нельзя. cry
#4 3 сентября 2012 в 02:00
вообще ставим более глобально вопрос: какие изменения нам готовит 5.4?
#5 3 сентября 2012 в 16:20
Из неприятностей (ну или из-за моих кривых рук), после установки 5.4 — появились ошибки об заполнения кеша APC и паданием сайтов.
Погуглил — предложили отключить нафиг в Апача в настройках виртуального хоста параметром

php_flag apc.cache_by_default Off

Теперь полет нормальный.
#6 3 сентября 2012 в 20:02
Рано радовался......
Перестал работать редактор FCKEditor :(
Попробовал поставить CKEditor 3.6 — тоже не работает.

Есть у кого мысли?
#7 3 сентября 2012 в 22:34
Все плохо… очень плохо.
htmlspecialchars не работает где бы он не был cry
То есть для нормальной работы необходимо добавлять 'cp1251' во все места где используется данная функция cry

Вот такие пироги… с котятами.
#8 3 сентября 2012 в 23:29

htmlspecialchars не работает где бы он не был


Или я не понимаю, о чем Вы, произведите поиск во движку по htmlspecialchars
/components/content/frontend.php
  1.  
  2. //PAGE HEADING
  3. if($cat['id']>0){
  4. $inPage->setTitle($cat['title']);
  5. $pagetitle = $cat['title'];
  6. $showdate = $cat['showdate'];
  7. $showcomm = $cat['showcomm'];
  8. $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.htmlspecialchars($cat['title']).'" href="'.HOST.'/rss/content/'.$cat['id'].'/feed.rss">');
  9.  
#9 6 сентября 2012 в 11:37
Вообщем потратил ещё вечерок и подредактировал везде где есть функция htmlspecialchars
Если кому надо — вот список файлов необходимых для изменения

\admin\applets\cats.php
\admin\applets\components.php
\admin\applets\config.php
\admin\applets\content.php
\admin\applets\cron.php
\admin\applets\menu.php
\admin\applets\modules.php
\admin\applets\tree.php
\admin\applets\usergroups.php
\admin\applets\users.php
\admin\components\board\backend.php
\admin\components\catalog\backend.php
\admin\components\clubs\backend.php
\admin\components\faq\backend.php
\admin\components\forms\backend.php
\admin\components\forum\backend.php
\admin\components\photos\backend.php
\admin\components\price\backend.php
\components\blogs\frontend.php
\components\board\frontend.php
\components\board\model.php
\components\content\frontend.php
\components\forms\frontend.php
\components\forum\frontend.php
\components\forum\includes\forumcore.php
\components\rssfeed\frontend.php
\components\users\frontend.php
\components\users\includes\usercore.php
\core\classes\formgen.class.php
\core\classes\page.class.php
\core\classes\user.class.php
\core\cms.php
\includes\bbcode\bbcode.lib.php
\plugins\p_fckeditor\fckeditor\editor\filemanager\connectors\php\basexml.php
\plugins\p_fckeditor\fckeditor\editor\filemanager\connectors\php\util.php
\plugins\p_fckeditor\fckeditor\fckeditor_php4.php
\plugins\p_fckeditor\fckeditor\fckeditor_php5.php
\plugins\p_ping\IXR_Library.php
А в этих файлах хоть и есть данная функция — но редактировать их необходимости нет. Вроде работает и без редактирования их.

\includes\geshi\geshi.php
\includes\geshi\geshi\php.php
\includes\smarty\libs\plugins\modifier.debug_print_var.php
\includes\smarty\libs\plugins\modifier.escape.php
\includes\smarty\libs\plugins\shared.escape_special_chars.php
\includes\smarty\libs\Smarty_Compiler.class.php
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.