| Профиль | Блог (2) | Комментарии (15) | Закладки | Продукты |
Меня это напрягает. И вот простой пример избавления от этого
Открываем файл engine\codeigniter\libraries\Input.php Ищем строчки в районе #707
if (preg_match("/script/i", $str) OR preg_match("/xss/i", $str))И заменяем
{
$str = preg_replace("#<(/*)(script|xss)(.*?)\>#si", '[removed]', $str);
}
if (preg_match("/xss/i", $str))Таким образом оставляем защиту от вредоносного xss кода, но разрешаем нормальную публикацию скриптов.
{
$str = preg_replace("#<(/*)(xss)(.*?)\>#si", '[removed]', $str);
}
if (preg_match("/script/i", $str))
{
$str = preg_replace("#<(script)(.*?)\>#si", '& lt;script& gt;', $str);
$str = preg_replace("#<(script)(.*?)\>#si", '& lt;/script& gt;', $str);
}
> 14:55 Поправил код
> Как я писал, редактор глючный, точнее наверное не редактор, а функции замен.
> & lt;script& gt;
> & lt;/script& gt;
> Не забудьте убрать пробелы
==========
Уважаемые эксперты, писавшие эту защиту, объясните, чем моя замена скобок опаснее вашей замены?
<(script)(.*?)\> что бы после замены, всё написанное в (.*?) оставалось на месте
> 18:41 Решено!
Решено. Покопавшись в голове, и вспомнив благодаря поиску, решил вопрос. Ответ очень простой. Вместо
$str = preg_replace("#<(script)(.*?)\>#si", '& lt;script& gt;', $str);ставим
$str = preg_replace("#<(script)(.*?)\>#si", '& lt;script$2& gt;', $str);Незабываем так же убрать пробелы!
PS: Пока писал этот пост, нашел как избавиться от маленького, но неприятного глюка, а именно отбивки строк. Отбивка строк не происходит, если строка заканчивается закрывающим тегом. После этого хоть сколько <бр> не ставь, отбивки не будет. Что б отбивка происходила, достаточно в конце, после тэга поставить пробел :-)
> 14:55 Дополнил PS
> Если в конце строки стоит тэг и след строка начинается с тэга, то и обычный перенос строки не срабатывает. Надо ставить пробел в конце строки.


А что Вы подразумеваете под Cl я не знаю. Cl в моем знание — это только Хлор, хим элемент.
engine/codeigniter — это как раз путь к файлам CI.
Но вопрос остается открытым, просто можно перефразировать.
Уважаемые эксперты, объясните пожалуйста, чем моя замена скобок опаснее Cl замены?