Нужно сначала запросить всю запись, содержащую
информацию о пользователе admin, а затем сравнить переданный пароль со
значением поля password. Сказанное иллюстрирует листинг 18.2.
//В файле config.php — параметры соединения с сервером MySQL
include «config.php»;
// Подключаемся к серверу
mysql_connect($SERVER, $USER, $PASSWORD);
mysql_select_db($DB);
$query = «SELECT * FROM users WHERE login = \»$login\»";
echo $query;
$r = mysql_query($query);
if (mysql_num_rows ($r)i>0)
{
$f = mysql_fetch_array($r);
222
Часть IV. Разработка собственной CMS
echo «
A теперь проверяем пароль…»;
if ($f['passwordf]===$pass)
echo «авторизация прошла успешно»;
else
die(«
access denied»);
}
else echo «
access denied»;
?>
Вывод данного сценария представлен на рис. 18.2. Мы опять ввели вместо
имени пользователя admin»/*, а пароль не указали. Но в этот раз у нас ничего
не вышло. Сценарий получил имя пользователя и всю запись этого
пользователя из таблицы, но при проверке пароля оказалось, что переданный код не
соответствует действительности, поэтому сценарий не «впустил» нас.
Рис. 18.2. Результат выполнения листинга 18.2
Желательно передаваемые переменные обработать также функциями
addsiashes () и HtmiSpeciaichars (). Вторая функция нам уже встречалась, а
первая, если вы не забыли, добавляет слэши перед кавычками.
$login = addsiashes($login);
$login = HtmiSpeciaichars($login);
В нашем случае вызывать указанные функции для переменной $pass нет
смысла, поскольку она не участвует в SQL-запросе.
Глава 18. Защита собственной CMS
223
Но даже все проделанное не всегда гарантирует стопроцентную защиту,
д что если вместо имени пользователя для авторизации используется ID
пользователя, т. е. его числовой идентификатор в системе. Тогда в запросе не
будет кавычек, и злоумышленник сможет вообще исполнить любой SQL-код
с помощью оператора union. Все, что ему потребуется ввести, — это строка
? union ‘ (без апострофов) в качестве идентификатора
пользователя.
Чтобы не позволить злоумышленнику выполнить любой SQL-код, нужно
перед помещением полученных данных (идентификатора пользователя) в SQL-
запрос проверить их с помощью функции isnumeric ():
if (is_numeric($id)) {
$query = «select * from users where id — $id»;
Так и только так вы защитите себя от этого вида SQL-инъекции.
ЧАСТЬ V
Интеграция CMS
с форумом рнрВВ
В пятой части мы интегрируем нашу CMS с популярным форумом phpBB.
Следуя приведенным инструкциям, вы сможете интегрировать с phpBB
не только нашу CMS, но и любую другую CMS, написанную на РНР.
ГЛАВА 19
Базовая интеграция
19.1. Преимущества и недостатки
интеграции с форумом
В данной главе мы интегрируем нашу CMS с популярным форумом phpBB.
От союза нашей CMS с phpBB мы только выигрываем. Во-первых, нам не
нужно разрабатывать средства регистрации и аутентификации пользователей,
проектировать базу данных для хранения пользовательских данных,
разрабатывать средства проверки прав доступа. Всем этим будет заниматься движок
форума. Во-вторых, в следующей главе мы интегрируем панель управления
сайтом в панель управления форумом, От этого тоже все выиграют: и мы как
разработчики, и администратор сайта. Нам не нужно разрабатывать средства
проверки прав пользователя (чтобы проверить, является ли пользователь
администратором и можно ли ему заходить в панель управления). А
пользователю (администратору) не нужно применять две разные панели
администрирования— одну для сайта (для управления контентом сайта), а вторую —
для форума.
По сути, наше решение даже более эффективно, чем интеграция с форумом в
других CMS. Например, в Slaed есть средства интеграции с форумом phpBB,
но все равно администратору приходится использовать две панели
администрирования — одну для форума, другую — для CMS. Да и таблицы
пользователей разные, a CMS лишь управляет синхронизацией этих таблиц. Наша же
CMS просто будет использовать таблицы форума, что снизит нагрузку на
сервер баз данных и сэкономит на нем место (не нужно будет хранить
сведения о пользователях в двух разных таблицах).
Особых недостатков интеграции с форумом нет.
5th Фев 2011
|
Теги:
|