4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 7 октября 2006 2:10
Некоторое время назад перешел в Intellect Board (том самом движке, который стоит на этом форуме) с использования addslashes на использование mysql_real_escape_string. Через некоторое время обнаружилось, что выросло время генерации страницы, а также периодически стала возникать ошибки "не удается подсоединиться к MySQL-серверу localhost" и "Too many MySQL connections" (при этом в конфиге сервер совершенно не localhost).
Когда я стал разбираться, в чем причина, то обнаружилось следующее: у меня до установки соединения с MySQL вызывалась функция getvar, которая берет данные из массива _GET и экранирует их с помощью mysql_real_escape_string. Так как соединения на данный момент нет, то делалась попытка установить его с параметрами, прописанными в настройках php.ini по умолчанию, т.е. соединиться с localhost. Но поскольку на localhost MySQL сервера нет, то происходила некоторая задержка, в течение которой предпринималась попытка установить соединение. Именно эта задержка и приводила к тому, что с точки зрения PHP соединение существовало, и увеличивало общее количество соединений, что при наличии нескольких пользователей на сайте одновременно приводило к ошибке "Too many connections".
Короче, вывод тут такой: либо использовать add_slashes (если не используется кодировка UTF-8, то проблем с безопасностью возникнуть не должно), либо внимательно отслеживать возможность вызова mysql_real_escape_string до момента установки соединения с БД.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
|