M-A-X пишет:
Как только такие бреши можно допускать?
Ядро форума досталось нам в наследство от предыдущего разработчика, поэтому подобные издержки вполне возможны. Просмотреть весь форум силами фактически одного человека (поскольку сейчас только я занимаюсь ядром ExBB FM 1.0) невозможно. Однако я считаю невероятно ценным тот факт, что мы ничего не скрываем от наших пользователей, всегда информируем о возникших проблемах и стараемся максимально быстро реагировать на любые изменения ситуации с безопасной работой ExBB, выпуская заплатки. Этим себя утруждают далеко не все наши потенциальные конкуренты
(Добавление)
По поводу опубликованной здесь информации, уже есть обновление. Данное критическое обновление устраняет возможность ввода неограниченных по длине данных в профиле пользователей, при регистрации, а также при отправке личных сообщений. Ввод подобных ограничений в целом положительно скажется на стабильности работы форума, а также позволит защитить форум от злоумышленников, которые могут воспользоваться этой особенностью с целью переполнения памяти, отведённой скриптам PHP на сервере
Крайне рекомендуется установить следующую заплатку как можно быстрее!
Откройте файл profile.php, найдите строки:
CODE:
$fm->input['icqnumber'] = (preg_match("/^[0-9]+$/", $fm->input['icqnumber'])) ? $fm->input['icqnumber']:'';
$fm->input['aolname'] = (strlen($fm->input['aolname']) >= 3) ? $fm->input['aolname']:'';
$fm->input['location'] = (strlen($fm->input['location']) >= 3) ? $fm->input['location']:'';
$fm->input['interests'] = (strlen($fm->input['interests']) >= 3) ? $fm->input['interests']:'';
$fm->input['aolname'] = (strlen($fm->input['aolname']) >= 3) ? $fm->input['aolname']:'';
$fm->input['location'] = (strlen($fm->input['location']) >= 3) ? $fm->input['location']:'';
$fm->input['interests'] = (strlen($fm->input['interests']) >= 3) ? $fm->input['interests']:'';
и замените их строками:
CODE:
$fm->input['icqnumber'] = (preg_match("/^[0-9]{5,9}$/", $fm->input['icqnumber'])) ? $fm->input['icqnumber']:'';
$fm->input['aolname'] = (($l = strlen($fm->input['aolname'])) >= 3 && $l <= 32) ? $fm->input['aolname']:'';
$fm->input['location'] = (($l = strlen($fm->input['location'])) >= 3 && $l <= 100) ? $fm->input['location']:'';
$fm->input['interests'] = (($l = strlen($fm->input['interests'])) >= 3 && $l <= 100) ? $fm->input['interests']:'';
$fm->input['aolname'] = (($l = strlen($fm->input['aolname'])) >= 3 && $l <= 32) ? $fm->input['aolname']:'';
$fm->input['location'] = (($l = strlen($fm->input['location'])) >= 3 && $l <= 100) ? $fm->input['location']:'';
$fm->input['interests'] = (($l = strlen($fm->input['interests'])) >= 3 && $l <= 100) ? $fm->input['interests']:'';
Аналогичные изменения необходимо произвести и в файле register.php.
Далее в файле profile.php найдите строку:
CODE:
if ($fm->input['useravatar'] != '' && (!preg_match("#^[A-Za-z0-9-_]{1,}\.[A-Za-z]{3,4}$#is",$fm->input['useravatar']) || !file_exists('im/avatars/'.$fm->input['useravatar']))) {
и замените её строкой:
CODE:
if ($fm->input['useravatar'] != '' && (!preg_match("#^[A-Za-z0-9-_]{1,64}\.[A-Za-z]{3,4}$#is",$fm->input['useravatar']) || !file_exists('im/avatars/'.$fm->input['useravatar']))) {
В файле register.php нужно найти строку:
CODE:
if ($fm->input['inmembername'] === '') {
и заменить её строкой:
CODE:
if ($fm->input['inmembername'] === '' || strlen($fm->input['inmembername']) > 20) {
Далее в этом же файле найдите строку:
CODE:
if (!preg_match("#^[A-Za-z0-9-_]{1,}\.[A-Za-z]{3,4}$#is",$fm->input['useravatar']) || !file_exists('im/avatars/'.$fm->input['useravatar'])) {
и замените её строкой:
CODE:
if (!preg_match("#^[A-Za-z0-9-_]{1,64}\.[A-Za-z]{3,4}$#is",$fm->input['useravatar']) || !file_exists('im/avatars/'.$fm->input['useravatar'])) {
Затем откройте файл messenger.php, найдите строку:
CODE:
if ($fm->input['msgtitle'] == '') {
и замените её строкой:
CODE:
if ($fm->input['msgtitle'] == '' || strlen($fm->input['msgtitle']) > 80) {
Теперь откройте файл include/vars.class.php, найдите строку:
CODE:
if (preg_match("#[^A-Za-z0-9_\-\.@]#is",$this->input[$key])) {
и замените её строкой:
CODE:
if (strlen($this->input[$key]) > 100 || preg_match("#[^A-Za-z0-9_\-\.@]#is",$this->input[$key])) {
Далее в этом же файле нужно найти строку:
CODE:
if (preg_match("#^(www\.|)([A-Za-z0-9-_]{1,40}\.){1,3}[A-Za-z]{2,4}(/[\.~A-Za-z0-9_-]{1,20}|)$#is",$this->input[$key])) {
и заменить её строкой:
CODE:
if (strlen($this->input[$key]) <= 255 && preg_match("#^(www\.|)([A-Za-z0-9-_]{1,40}\.){1,3}[A-Za-z]{2,4}(/[\.~A-Za-z0-9_-]{1,20}|)$#is",$this->input[$key])) {
Теперь осталось только разобраться с шаблонами. Откройте файл templates/ваш_скин/profile.tpl, найдите строки:
CODE:
<td class="profilright"><input type="text" style="width: 200px" name="emailaddress" maxlength="255" value="{$fm->user['mail']}"></td>
CODE:
<td class="profilright"><input type="text" style="width: 130px" name="icqnumber" size=13 maxlength="15" value="{$fm->user['icq']}"></td>
CODE:
<td class="profilright"><input type="text" style="width: 150px" name="aolname" maxlength="255" value="{$fm->user['aim']}"></td>
и замените их соответственно строками:
CODE:
<td class="profilright"><input type="text" style="width: 200px" name="emailaddress" maxlength="100" value="{$fm->user['mail']}"></td>
CODE:
<td class="profilright"><input type="text" style="width: 130px" name="icqnumber" size=13 maxlength="9" value="{$fm->user['icq']}"></td>
CODE:
<td class="profilright"><input type="text" style="width: 150px" name="aolname" maxlength="32" value="{$fm->user['aim']}"></td>
И, наконец, откройте файл templates/ваш_скин/agreed.tpl, найдите строки:
CODE:
<td class="profilright"><input type="text" name="emailaddress" style="width: 200px" size="20" maxlength="255"></td>
CODE:
<td class="profilright"><input type="text" style="width: 130px" name="icqnumber" size="13" maxlength="15"></td>
CODE:
<td class="profilright"><input type="text" style="width: 150px" name="aolname" size="20" maxlength="255"></td>
и замените их соответственно строками:
CODE:
<td class="profilright"><input type="text" name="emailaddress" style="width: 200px" size="20" maxlength="100"></td>
CODE:
<td class="profilright"><input type="text" style="width: 130px" name="icqnumber" size="13" maxlength="9"></td>
CODE:
<td class="profilright"><input type="text" style="width: 150px" name="aolname" size="20" maxlength="32"></td>
Это обновление обсуждается здесь, не нужно оставлять комментарии в данной теме!