Preci

Рейтинг
72
Регистрация
21.01.2012

Я вообще уже в шоке. Сначала утром у вас что то сломалось и сайт был несколько часов в ауте. Сейчас попросил разобраться в разделом /tmp и увеличить его размер, в итоге сайт уже пол часа в ауте.

Осенью когда только перешел к вам все было нормально, а с конца января...

upd. спустя почти час сервер подняли, проблему с тем что где-то там кончилась память устранили и такого больше повторяться не должно. Ни извинений, ничего. Хотя толку то от них.

Осенью когда переезжал к вам, заказывал настройку сервера у стороннего человека. В итоге больше 2 мес ни одного падения не было. Затем в конце января что-то у вас упало и понеслась... Каждую неделю сервер падает. Даже настройку сервера у вас заказывал (это отдельная история) в итоге ничерта: каждый день захожу и думаю "Ух ты, сегодня ничего не упало" - печально когда удивляешься тому, что все работает.

Я связался с автором моста и он ответил:

this SQL injection uses the IPBWI function name2id located in \member.inc.php

Unfortunately, IP.board 3 does not support prepared statements, so you should harden this query by yourself, using your own prepared-statement class or additional filtering. As IPBWI API is opensource, there are no limits for you in hardening this query. You can set an alternative path to your custom IPBWI class directory on WordPress' IPBWI core settings.

Функция:

public function name2id($names){

if(is_array($names)){
foreach($names as $i => $j){
$sql = $this->ipbwi->ips_wrapper->DB->query('SELECT member_id FROM '.$this->ipbwi->board['sql_tbl_prefix'].'members WHERE LOWER(name)="'.$this->ipbwi->ips_wrapper->DB->addSlashes($this->ipbwi->makeSafe(strtolower(trim($names)))).'"');
if($row = $this->ipbwi->ips_wrapper->DB->fetch($sql)){
$ids[$i] = $row['member_id'];
}else{
$ids[$i] = false;
}
}
return $ids;
}else{
$sql = $this->ipbwi->ips_wrapper->DB->query('SELECT member_id FROM '.$this->ipbwi->board['sql_tbl_prefix'].'members WHERE LOWER(name)="'.$this->ipbwi->ips_wrapper->DB->addSlashes($this->ipbwi->makeSafe(strtolower(trim($names)))).'"');
if($row = $this->ipbwi->ips_wrapper->DB->fetch($sql)){
return $row['member_id'];
}else{
return false;
}
}
}

После:

public function name2id($names){

Пытаюсь добавить:

$names = strip_tags($names);

$names = htmlspecialchars($names);
$names = mysql_real_escape_string($names);

Но результата никакого нет... Может, есть какие-то хуки для Wordpress, что бы при попытке залогиниться Wordpress удалял плохие символы из логина, а затем уже логин "чистым" уйдет в "мост"?

---------- Добавлено 13.03.2015 в 16:50 ----------

Вообщем автор плагина что-то нашаманил, теперь при использовании логина if(now()=sysdate(),sleep(0),0)/-3246" or 4531=if((42=42),sleep(5),4531) and "mkmf"="mkmf'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/

Wordpress пишет ERROR: Invalid username.

Ошибка была в файле ips_wrapper.inc.php

Надо заменить строку

$sql = $this->DB->query('SELECT member_id FROM '.$this->settings['sql_tbl_prefix'].'members WHERE LOWER(name)="'.strtolower(trim($_POST['log'])).'"');

На

$sql = $this->DB->query('SELECT member_id FROM '.$this->settings['sql_tbl_prefix'].'members WHERE LOWER(name)="'.$this->DB->addSlashes(strtolower(trim($_POST['log']))).'"');

Тему можно закрывать

Так а почему уже взломали?

Все запросы идут на wp-login, запрос который висел 5000 сек:

SELECT member_id FROM members WHERE LOWER(name)="if(now()=sysdate(),sleep(0),0)/-3246" or 4531=if((42=42),sleep(5),4531) and "mkmf"="mkmf'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/";

Используется "мостом" т.е. при попытке залогиниться на сайте Wordpress, идет поиск пользователя в базе IPB. Единственное, как я понимаю, вместо логина человек подставлял

"if(now()=sysdate(),sleep(0),0)/-3246" or 4531=if((42=42),sleep(5),4531) and "mkmf"="mkmf'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/"

В результате чего бд начинала тупить. Разве я не прав?

---------- Добавлено 13.03.2015 в 02:39 ----------

Вообще такого куча:

# User@Host: @ localhost []

# Query_time: 4962.395250 Lock_time: 0.000079 Rows_sent: 0 Rows_examined: 993
SET timestamp=1426191857;
SELECT member_id FROM members WHERE LOWER(email)="if(now()=sysdate(),sleep(0),0)/-4366" or 4172=if((7136>7135),sleep(5),4172) and "cfdn"="cfdn'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/";
# User@Host: @ localhost []
# Query_time: 4992.429271 Lock_time: 0.000078 Rows_sent: 0 Rows_examined: 999
SET timestamp=1426191857;
SELECT member_id FROM members WHERE LOWER(email)="if(now()=sysdate(),sleep(0),0)/-5959" or 8546=if((93=93),sleep(5),8546) and "drxz"="drxz'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/";
# User@Host: @ localhost []
# Query_time: 5030.604401 Lock_time: 0.000249 Rows_sent: 0 Rows_examined: 1007
SET timestamp=1426191857;
SELECT member_id FROM members WHERE LOWER(name)="if(now()=sysdate(),sleep(0),0)/-9988" or 8426=if((5623>5622),sleep(5),8426) and "xjna"="xjna'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/";
# User@Host: @ localhost []
# Query_time: 5091.581603 Lock_time: 0.000167 Rows_sent: 0 Rows_examined: 1019
SET timestamp=1426191857;
SELECT member_id FROM members WHERE LOWER(name)="if(now()=sysdate(),sleep(0),0)/-5987" or 9096=if((30=30),sleep(5),9096) and "piht"="piht'xor(if(now()=sysdate(),sleep(0),0))or'"xor(if(now()=sysdate(),sleep(0),0))or"/";

Тут просто какие то условия бредовые, я не понимаю.

SeVlad:
http://codex.wordpress.org/Function_Reference/wp_is_mobile
/ru/forum/882988

Но лучше адаптивный дизайн, а не отдельные темы.

Понятно что лучше, но это гемор еще тот, да и для мобильных устройств хочется сделать сайт менее навороченным.

За ссылки спасибо.

Здравствуйте!

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

Пробовал использовать плагины, но они слишком объемные и кривые. Например WP Mobile Detector лепит картинку в начало записи и каким-то образом прогоняет всю тему через свой код, в результате чего страницы с комментариями грузятся адски долго.

Есть ли какие-то варианты отдавать юзерам с мобильных устройств нестандартную тему, без использования плагинов?

Можно настроить кэширование на стороне клиента по заголовкам If-modified-since <-> Last-Modified. Тогда при нажатой <F5> браузер будет брать страницу из своего кэша.

Но может появиться вопрос о нажатой <Shift + F5> или <Ctrl + F5>

Ну F5 только я тыкал, не замечал что бы кто-то такой гадостью занимался. А вот запросы на одну и ту же страницу вида sute.ru/?id=<рандом число>, с одного IP - довольно частое явление.

Как вариант, можно и вот так.

Спасибо, судя по описанию то что надо. Есть только вопрос: там как я понял автор ставит ограничение в 2 запроса в секунду с одного IP - это чиcло должно как то зависеть от посещаемости, или 2 это "универсально"?

Seredniy:
SeVlad, я сегодня уже комбинировать и цсс, и js....получились костыли) завтра ещё пошаманю и если удачно - отпишусь тут

/ru/forum/comment/13495075

Вроде выяснил проблему, не знаю дудос это был или нет, но с 5 вечера и до 12 ночи 200.000 раз запрашивался файл wp-content/plugins/abc_post_viev/vievpost.php убрал с него галочку "Отключить кеширование" и пока (тьфу-тьфу-тьфу) все вошло в норму.

У меня вообще есть подозрение что дудоса не было, а все из-за того что я забыл снять эту галочку и боты яндекса / гугла каждый раз запрашивали этот файл, а он в свою очередь лез в базу и показывал им кол-во просмотров поста.

Вообщем как обычно - все было снаружи...

Вообщем меня дудосят, подключил cloudflare жду обновления dns.

За сим тему можно закрывать

Логи по 400 мб весят, посещаемость сайта ~20к в день, там и так каждую секунду запросы :) Единственное что легко можно вычислить - если идут POST запросы, а не GET (POST- значит что-то шлют на сервер как я понимаю)

Всего: 236