GiV Опубликовано 27 Июня 2004 Жалоба Поделиться Опубликовано 27 Июня 2004 Есть такой тип взлома форумов как SQL Injection. На человеческом языке это называется внедрение вредоносного кода в запрос, в результате чего злоумышленник может или вывести из строя форум, или получить некоторую важную информацию для дальнейшего взлома. На самом деле то что вываливается при ошибке базы в IPB на экран нужно только администратору форума. Согласитесь, что для простого пользователя это совершенно не нужная информация, с другой стороны для злоумышленника это возможность посмотреть на полный запрос, вызвавший ошибку, и составить на его основе вредоносный запрос. Как будем избавлятся от излишней информативности IPB при ошибках базы?Очевидно, что нужно запретить IPB выдавать расширенное сообщение об ошибке, заменив его чем то вроде: "Возникли некоторые проблемы в работе форума. Попробуйте зайти позже." Но как быть администратору форума, ему то нужно знать где и из-за чего произошла ошибка!?! Мы поступим просто, будем высылать сообщение об ошибке на некоторый администраторский e-mail, с детальной информацией о ней. Ну что ж приступим.Открываем файл: /sources/Drivers/mySQL.php В самом его начале после строчки <?phpдобавляемerror_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);это нам позволит избавится от ругани PHP если сервер база отвалится, или еще какая гадость случится. Далее заменяем строчки: if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) ) { echo ("ERROR: Cannot find database ".$this->obj['sql_database']); }на if (!$this->connection_id) { $this->fatal_error('ERROR: Link-ID == false, connect failed'); return false; } if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) ) { $this->fatal_error("ERROR: Cannot find database ".$this->obj['sql_database']); return false; }таким образом мы отлавливаем ошибки возникающие при коннекте к серверу базы (первый if) и ошибки при выборе базы форума на сервере (второй if) Находим строчки: $the_error .= "\n\nmySQL error: ".mysql_error()."\n"; $the_error .= "mySQL error code: ".$this->error_no."\n"; $the_error .= "Date: ".date("l dS of F Y h:i:s A"); $out = "<html><head><title>Invision Power Board Database Error</title> <style>P,BODY{ font-family:arial,sans-serif; font-size:11px; }</style></head><body> <br><br><blockquote><b>There appears to be an error with the {$INFO['board_name']} database.</b><br> You can try to refresh the page by clicking <a href=\"javascript:window.location=window.location;\">here</a>, if this does not fix the error, you can contact the board administrator by clicking <a href='mailto:{$INFO['email_in']}?subject=SQL+Error'>here</a> <br><br><b>Error Returned</b><br> <form name='mysql'><textarea rows=\"15\" cols=\"60\">".htmlspecialchars($the_error)."</textarea></form><br>We apologise for any inconvenience</blockquote></body></html>"; echo($out); die("");удаляем их, теперь IPB об ошибках будет молчать как партизан. Частично задача решена, продолжаем дальше. Там же заменим строчки: if ($this->return_die == 1) { $this->error = mysql_error(); $this->error_no = mysql_errno(); $this->failed = 1; return; }на $this->error = mysql_error(); $this->error_no = mysql_errno(); if ($this->return_die == 1) { $this->failed = 1; return; } а ниже этих строк добавим $message = "Database error in:\r\n{$the_error}\r\n\r\n"; $message .= 'mySQL error: ' . $this->error . "\r\n\r\n"; $message .= 'mySQL error number: ' . $this->error_no . "\r\n\r\n"; $message .= 'Script URI: '. $_SERVER['REQUEST_URI'] . "\r\n"; $message .= 'Date: ' . date('l dS of F Y h:i:s A') . "\r\n"; $message .= 'IP Address: ' . $_SERVER['REMOTE_ADDR'] . "\r\n"; $mail_headers = "From: \"".$INFO['email_tech']."\" <".$INFO['email_tech'].">\n"; $mail_headers .= "To: ".$INFO['email_tech']."\n"; $mail_headers .= "Subject: Database error!\n"; $mail_headers .= "Content-Type: text/plain; charset=\"windows-1251\"\n"; $mail_headers .= "X-Priority: 3\n"; $mail_headers .= "X-Mailer: IPB PHP Mailer\n"; @mail ($INFO['email_tech'], 'Database error!', $message , $mail_headers); echo "<html><head><title>System Error</title>"; echo "</head>\r\n"; echo "<body>\r\n"; echo "<b>Возникли некоторые проблемы в работе форума.</b><br />\r\n"; echo "Попробуйте зайти позже. Либо нажмите кнопку<a href=\"javascript:window.location=window.location;\">обновить</a> в вашем браузере."; echo "<p>Приносим извинения за причиненные неудобства.</p>"; echo "\r\n\r\n</body></html>"; exit; файл mySQL.php готов к дальнейшему использованию. Осталось только внести изменения в файл ./conf_global.php после строчки$INFO['email_out']='admin@domain.com';добавим$INFO['email_tech']='tech_admin@domain.com';e-mail адреса не забудьте поменять на свои =) параметр email_tech прописывает ящик на который будут кидаться сообщения об ошибках базы. вот вроде бы и все. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Остап Опубликовано 27 Июня 2004 Жалоба Поделиться Опубликовано 27 Июня 2004 Vanish Спасибо, всё чудесно. Предлагаю только добавить кодировку в сообщение в броузере. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Heo Опубликовано 28 Июня 2004 Жалоба Поделиться Опубликовано 28 Июня 2004 Vanish Огромное сппсибо! Просто супер статья! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fastserg Опубликовано 28 Июня 2004 Жалоба Поделиться Опубликовано 28 Июня 2004 А так же не мешало бы видеть сам запрос, который мог вызвать сбой... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
IBResource Опубликовано 28 Июня 2004 Жалоба Поделиться Опубликовано 28 Июня 2004 Fastserg А так же не мешало бы видеть сам запрос, который мог вызвать сбой...Так это же $the_error (текст запроса, который в textarea в стандарте отображается) и есть. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fastserg Опубликовано 28 Июня 2004 Жалоба Поделиться Опубликовано 28 Июня 2004 Oska Я про mySQL query error: $the_query Добавлено в [mergetime]1088437002[/mergetime] И оно на мыло не уходит. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 29 Июня 2004 Жалоба Поделиться Опубликовано 29 Июня 2004 а й меня как обычно не все слава богуWarning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /usr/clients/lalala/www/sources/Topics.php on line 798 от така бякастрока в которой ругаеться // Get the member info. We parse the data and cache it. // It's likely that the same member posts several times in // one page, so it's not efficient to keep parsing the same // data if ($row['author_id'] != 0) { // Is it in the hash? if ( isset($cached_members[ $row['author_id'] ]) ) { // Ok, it's already cached, read from it $poster = $cached_members[ $row['author_id'] ]; $row['name_css'] = 'normalname'; } else { $row['name_css'] = 'normalname'; 798 --->> $poster = $this->parse_member( &$row ); // Add it to the cached list $cached_members[ $row['author_id'] ] = $poster; } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 3 Июля 2004 Жалоба Поделиться Опубликовано 3 Июля 2004 Vanish допустим произошла SQL ошибка, например, Too many connections. Она возникла одновременно допустим у 100 человек. И чего все эти 100 писем админу пошлются? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 3 Июля 2004 Автор Жалоба Поделиться Опубликовано 3 Июля 2004 все 100 и пошлются, хотя от настроек мылсервера зависит, хотя если у вас выпадает Too many connections то все 100 =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 3 Июля 2004 Жалоба Поделиться Опубликовано 3 Июля 2004 народ, в моем вопросе у кого руки растут не оттуда ? ошибка то вроде php.ini мне нужно знать кого пинать в данном варианте ... хотя я решился на апдейт своей единицы. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 3 Июля 2004 Автор Жалоба Поделиться Опубликовано 3 Июля 2004 Dekker версия форума какая? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 3 Июля 2004 Жалоба Поделиться Опубликовано 3 Июля 2004 Vanish единица 1.1.1 но по идее If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.версия тут не при чем. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 3 Июля 2004 Автор Жалоба Поделиться Опубликовано 3 Июля 2004 а точно, я просто сижу запаренный...$poster = $this->parse_member( &$row );все дело в амперсанде перед $row, попробуй убрать. Но проблема через хостера решаться должна. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
medick Опубликовано 3 Июля 2004 Жалоба Поделиться Опубликовано 3 Июля 2004 допустим произошла SQL ошибка, например, Too many connections. Она возникла одновременно допустим у 100 человек. И чего все эти 100 писем админу пошлются?тогда можно составить список подобных ошибок, о которых админ не будет узнавать Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
saman Опубликовано 5 Июля 2004 Жалоба Поделиться Опубликовано 5 Июля 2004 Vanish Сейчас у меня только один вопрос, а это на IPB 2.0 работать будет?Если нет, то если не составит большого труда, прошу переделать и под IPB 2.0, т.к. данная модификация является очень полезной Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
AntiPlus Опубликовано 7 Июля 2004 Жалоба Поделиться Опубликовано 7 Июля 2004 Спасибо большое, обязательно воспользуюсь Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
house Опубликовано 8 Марта 2005 Жалоба Поделиться Опубликовано 8 Марта 2005 Хороший мод. Но: если пользователей будет 1000 и соответственно мне придёт 1000 писем.Не мог бы ты попровать его, чтобы письма не улетали, а все ошибки записывались в файл какой-нибудь, и потом можно было просто посмотреть(желательно через админку). Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
NvG Опубликовано 7 Мая 2005 Жалоба Поделиться Опубликовано 7 Мая 2005 Сейчас я над этим занимаюсь [1115474217:1115477751]Уже есть некоторые наработки инфа в логе примерно так будет выглядеть:<?die('Your bunny wrote...')?>a%3A1%3A%7Bi%3A0%3Ba%3A2%3A%7Bs%3A5%3A%22ORIGN%22%3Bs%3A3552%3A%22YSUzQTUlM0ElN0JzJTNBNCUzQSUyMnRpbWUlMjIlM0JpJTNBMTExNTQ3NzY1NCUzQnMlM0E1JTNBJT IyY2FjaGUlMjIlM0JOJTNCcyUzQTclM0ElMjJxdWVyaWVzJTIyJTNCaSUzQTUlM0JzJTNBMTAlM0ElMj J hZGRpdGlvbmFsJTIyJTNCYSUzQTQlM0ElN0JzJTNBNSUzQSUyMmxldmVsJTIyJTNCcyUzQTExJTNBJTI y cXVlcnkrZXJyb3IlMjIlM0JzJTNBNSUzQSUyMmVycm5vJTIyJTNCaSUzQTEwNjQlM0JzJTNBNSUzQSUy M mVycm9yJTIyJTNCcyUzQTY5JTNBJTIyWW91K2hhdmUrYW4rZXJyb3IraW4reW91citTUUwrc3ludGF4K 2 5lYXIrJTI3ZHNnZmhnZmhnamdoamhqJTI3K2F0K2xpbmUrMSUyMiUzQnMlM0ExMCUzQSUyMmFkZGl0aW 9 uYWwlMjIlM0JzJTNBMTUlM0ElMjJkc2dmaGdmaGdqZ2hqaGolMjIlM0IlN0RzJTNBNyUzQSUyMmZ1bGx v YmolMjIlM0JhJTNBOSUzQSU3QnMlM0ExMiUzQSUyMnNxbF9kYXRhYmFzZSUyMiUzQnMlM0E0JTNBJTIy b TByZyUyMiUzQnMlM0E4JTNBJTIyc3FsX3VzZXIlMjIlM0JzJTNBNCUzQSUyMm0wcmclMjIlM0JzJTNBO C UzQSUyMnNxbF9wYXNzJTIyJTNCcyUzQTUlM0ElMjIxMjM0NSUyMiUzQnMlM0E4JTNBJTIyc3FsX2hvc3 Q lMjIlM0JzJTNBOSUzQSUyMmxvY2FsaG9zdCUyMiUzQnMlM0E4JTNBJTIyc3FsX3BvcnQlMjIlM0JzJTN B MCUzQSUyMiUyMiUzQnMlM0ExMCUzQSUyMnBlcnNpc3RlbnQlMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0Jz J TNBMTQlM0ElMjJzcWxfdGJsX3ByZWZpeCUyMiUzQnMlM0E2JTNBJTIyaXBiMTNfJTIyJTNCcyUzQTE0J T NBJTIyY2FjaGVkX3F1ZXJpZXMlMjIlM0JhJTNBNSUzQSU3QmklM0EwJTNCcyUzQTcwMCUzQSUyMlNFTE V DVCttb2RlcmF0b3IubWlkK2FzK2lzX21vZCUyQyttb2RlcmF0b3IuYWxsb3dfd2FybiUyQyttLmlkJTJ D K20ubmFtZSUyQyttLm1ncm91cCUyQyttLnBhc3N3b3JkJTJDK20uZW1haWwlMkMrbS5yZXN0cmljdF9w b 3N0JTJDK20udmlld19zaWdzJTJDK20udmlld19hdnMlMkMrbS52aWV3X3BvcCUyQyttLnZpZXdfaW1nJ T JDK20uYXV0b190cmFjayUyQyUwQSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrK20ubW9kX3Bvc3 R zJTJDK20ubGFuZ3VhZ2UlMkMrbS5za2luJTJDK20ubmV3X21zZyUyQyttLnNob3dfcG9wdXAlMkMrbS5 t c2dfdG90YWwlMkMrbS50aW1lX29mZnNldCUyQyttLnBvc3RzJTJDK20uam9pbmVkJTJDK20ubGFzdF9w b 3N0JTJDJTBBKysrKysrKysrKysrJTA5JTA5JTA5JTA5KyttLmxhc3RfdmlzaXQlMkMrbS5sYXN0X2Fjd G l2aXR5JTJDK20uZHN0X2luX3VzZSUyQyttLnZpZXdfcHJlZnMlMkMrbS5vcmdfcGVybV9pZCUyQyttLn R lbXBfYmFuJTJDK20uc3ViX2VuZCUyQytnLiUyQSUwQSsrKysrKysrKysrKyUwOSUwOSUwOSUwOSsrRlJ P TStpcGIxM19tZW1iZXJzK20lMEErKysrKysrKysrKyslMDklMDklMDklMDkrKysrTEVGVCtKT0lOK2lw Y jEzX2dyb3VwcytnK09OKyUyOGcuZ19pZCUzRG0ubWdyb3VwJTI5JTBBKysrKysrKysrKysrJTA5JTA5J T A5JTA5KysrK0xFRlQrSk9JTitpcGIxM19tb2RlcmF0b3JzK21vZGVyYXRvcitPTislMjhtb2RlcmF0b3 I ubWVtYmVyX2lkJTNEbS5pZCtPUittb2RlcmF0b3IuZ3JvdXBfaWQlM0RtLm1ncm91cCslMjklMEErKys r KysrKysrKyslMDklMDklMDklMDkrK1dIRVJFK20uaWQlM0QxJTIyJTNCaSUzQTElM0JzJTNBNzUlM0El M jJERUxFVEUrRlJPTStpcGIxM19zZXNzaW9ucytXSEVSRStydW5uaW5nX3RpbWUrJTNDKzExMTU0NzQwN T Qrb3IrbWVtYmVyX2lkJTNEJTI3MSUyNyUyMiUzQmklM0EyJTNCcyUzQTI4MCUzQSUyMklOU0VSVCtJTl R PK2lwYjEzX3Nlc3Npb25zKyUyOGlkJTJDK21lbWJlcl9uYW1lJTJDK21lbWJlcl9pZCUyQytpcF9hZGR y ZXNzJTJDK2Jyb3dzZXIlMkMrcnVubmluZ190aW1lJTJDK2xvY2F0aW9uJTJDK2xvZ2luX3R5cGUlMkMr b WVtYmVyX2dyb3VwJTI5K1ZBTFVFUyslMjglMjc0MDc5MDAyMWE1NmFjMjFjNDc0NGMzMWQ5MTNkMjU3Z C UyNyUyQyslMjdOYXZpZ2F0b3IlMjclMkMrJTI3MSUyNyUyQyslMjcxMjcuMC4wLjElMjclMkMrJTI3TW 9 6aWxsYSUyRjMuMCslMjhXaW5kb3dzK05UKzUuMSUzQitVJTI5K09wZXJhKzcuMjMrKyU1QnJ1JTVEJTI 3 JTJDKyUyNzExMTU0Nzc2NTQlMjclMkMrJTI3JTJDJTJDJTI3JTJDKyUyNyUyNyUyQys0JTI5JTIyJTNC a SUzQTMlM0JzJTNBOTAlM0ElMjJVUERBVEUraXBiMTNfbWVtYmVycytTRVQrbGFzdF92aXNpdCUzRGxhc 3 RfYWN0aXZpdHklMkMrbGFzdF9hY3Rpdml0eSUzRCUyNzExMTU0Nzc2NTQlMjcrV0hFUkUraWQlM0QlMj c xJTI3JTIyJTNCaSUzQTQlM0JzJTNBMjIwJTNBJTIyU0VMRUNUK3MuJTJBJTJDK3QudGVtcGxhdGUlMkM r Yy5jc3NfdGV4dCUwQSsrKyslMDklMDklMDklMDklMDlGUk9NK2lwYjEzX3NraW5zK3MlMEErKysrJTA5 J TA5JTA5JTA5JTA5KytMRUZUK0pPSU4raXBiMTNfdGVtcGxhdGVzK3QrT04rJTI4dC50bWlkJTNEcy50b X BsX2lkJTI5JTBBKysrKyUwOSUwOSUwOSUwOSUwOSsrTEVGVCtKT0lOK2lwYjEzX2NzcytjK09OKyUyOH M uY3NzX2lkJTNEYy5jc3NpZCUyOSUwQSsrKyslMDkrKysrKysrKysrKyUwOSsrK1dIRVJFK3MuZGVmYXV s dF9zZXQlM0QxJTIyJTNCJTdEcyUzQTUlM0ElMjJkZWJ1ZyUyMiUzQmklM0EwJTNCJTdEJTdE%22%3Bs%3A8%3A%22CHECKSUM%22%3Bs%3A32%3A%22f729e4aa256301c83d746c7796bda768%22%3B%7D%7D[1115474217:1115479318]На одну ошибку — 4кб места, но это самый полный дамп состояния MySQL.[1115474217:1115479382]Если кто хочет, можете попробовать расшифровать этот кусок Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
uniorzeroman Опубликовано 21 Июня 2005 Жалоба Поделиться Опубликовано 21 Июня 2005 Папки sources/drivers в 2.0.4 ( у меня правда стоит 2.1 Alpha 4 ) нету Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 21 Июня 2005 Жалоба Поделиться Опубликовано 21 Июня 2005 Чаще всего мод такую ошибку присылает: Database error in: mySQL query error: INSERT INTO ibf_sessions (id,member_name,member_id,member_group,in_forum,in_topic,login_type,running_t ime,location,ip_address,browser) VALUES('google_session','GoogleBot','0','2','0','2338','','1119124913','ST,,','66.249.66.73','Mozilla/5.0 (compatible; Googlebot/2.1; +http://ww') mySQL error: Duplicate entry 'google_session' for key 1 mySQL error number: 1062 А вообще - полезно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 22 Июня 2005 Жалоба Поделиться Опубликовано 22 Июня 2005 угу, я в своё время это обсуждал, никто не поверил но что-то тему не нахожу Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Anna Опубликовано 22 Июня 2005 Жалоба Поделиться Опубликовано 22 Июня 2005 Что насчет переделки под 2.0.х ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 6 Июля 2005 Жалоба Поделиться Опубликовано 6 Июля 2005 Мне только что мегабайтовое письмо пришло, угадайте что за ошибка БД!? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 6 Июля 2005 Жалоба Поделиться Опубликовано 6 Июля 2005 гугля Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 6 Июля 2005 Жалоба Поделиться Опубликовано 6 Июля 2005 Нет:mySQL error: Got a packet bigger than 'max_allowed_packet' mySQL error number: 1153 Судя из запроса - кто-то додумался слишком-большую ПМку кому-то прислать! В 1.2 чтоли нету проверки на кол-во символов в ПМ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.