<MyRusakov.ru />

WordPress 6 с Нуля до Гуру

WordPress 6 с Нуля до Гуру

Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.

Также Вы получите и всю практику, поскольку прямо в курсе с нуля создаётся полноценный Интернет-магазин, который затем публикуется в Интернете. И всё это прямо на Ваших глазах.

Помимо уроков к курсу идут упражнения для закрепления материала.

И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Форум сайта MyRusakov.ru

Админ-панель
21.08.2015 12:41:59 Админ-панель Сообщение #1
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Здравствуйте.
Суть вопроса такова: делаю админ-панель для сайта (сайт на самописном движке по типу того, который был создан в курсе  "Создание движка на PHP и MySQL 2.0" ). Там есть достаточно полезный класс Request, который получает данные из запросов и делает их безопасными. Если мы в этом классе обработаем данные, скажем, из формы добавления статьи, то всё html-форматирование (все примененные теги, для придания нужного вида) пропадет, так как там присутствует функция htmlspecialchars() Если ее убрать, то, по-идее, админка не потеряет в безопасности?
Еще вопрос по авторизации. Мне кажется, что в случае админ-панели, наверное, не стоит заходить в БД и проверять наличие пользователя-админа, а просто вынести эти данные в константы в тот же Config, чтоб лишний раз не нагружать сервер. Правильно ли так делать или нет?
Профиль
23.08.2015 00:46:54 Админ-панель Сообщение #2
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 177

По первому вопросу, админка никак не потеряет в безопасности, так как только админ будет грузить html код и прочее, он ведь не будет сам себе вредить.

Второй вопрос, если вы используете один и тот же клас request для сайта и для админки, тогда сам сайт будет уязвим.

Насчет админа, вы ведь понимаеет, что такой вариант сработает только для одно админа, а если добавить еще одного? Да можно сделать массив с логинами и паролями админов, но.. Вообще я бы сделал у каждого юзера в базе ячейку типу status и туда ставил или 0 простой юзер или 1 админ, занес бы в сессию, и потом это значение сверял и разрешал бы доступ к админке (это не такая уж и сильная нагрузка)
Профиль
23.08.2015 15:34:55 Админ-панель Сообщение #3
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Спасибо большое за ответ. По-поводу Request, используются разные классы.
По-поводу нескольких админов, я уже тоже подумал на счет этого, это, действительно, не удобно из-за того, что придется вручную расширять массив с админами.
Еще один вопрос, по-поводу организации сессий. Где лучше всего начинать сессии: в файле index.php или где-нибудь еще? Когда я смотрел уроки из видео курса по созданию движка, то в файле index.php не было старта сессий.
Профиль
23.08.2015 20:42:23 Админ-панель Сообщение #4
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 177

По курсу, сессии начинались там где ими пользовались, то есть была такая конструкция if(!session_id()) session_start();То есть мы проверяем, была ли начата сессия, если нет, то начинаем её.
Как по мне это хороший вариант.
Профиль
25.08.2015 11:16:39 Админ-панель Сообщение #5
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

я тоже делаю так, но, почему то, если не указать эту конструкцию в index-файле, то сессии не работают.
Профиль
28.08.2015 12:26:33 Админ-панель Сообщение #6
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 177

Можете привести код в качестве примера
Профиль
28.08.2015 13:42:43 Админ-панель Сообщение #7
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

index.php

set_include_path(get_include_path().PATH_SEPARATOR.'core'.PATH_SEPARATOR.'modules'.
PATH_SEPARATOR.'controllers'.PATH_SEPARATOR.'library'.PATH_SEPARATOR.'validators' );
spl_autoload_extensions('_class.php' );
spl_autoload_register();

$router = new Router();
UserController_class.php
class UserController extends MainController {
public function auth() {
if (!session_id()) session_start();
if (isSet($_POST['auth_button'])) {
$user = new User();
$user->auth();
}
parent::redirect($_SERVER['HTTP_REFERER']);
}
public function logout() {
if (!session_id()) session_start();
$user = new User();
$user->logout();
parent::redirect($_SERVER['HTTP_REFERER']);
}
}
User_class.php
 class User {
private $login = '';
private $password = '';
public function __construct() {
$request = new Request();
$this->login = $request->getDataByName('login' );
$this->password = md5($request->getDataByName('password' ));
}
private function getUserFromDB() {
$params = array(
'where' => $this->getWhere(),
'result' => 'row',
'table' => 'users',
'field' => '',
'colname' => '',
'value' => '',
'start' => 0,
'limit' => 0,
'order' => false
);
$db = DataBase::getDBO();
return $db->select($params);
}
public function auth() {
if (isSet($_POST['auth_button'])) {
$user_data = $this->getUserFromDB();
if (!empty($user_data)) {
$_SESSION['login'] = $user_data['login'];
$_SESSION['password'] = $user_data['password'];
$_SESSION['avatar'] = $user_data['photo'];
$_SESSION['error_auth'] = 0;
}
else $_SESSION['error_auth'] = 1;
}
}
public function logout() {
if (!session_id()) session_start();
unset($_SESSION['login']);
unset($_SESSION['error_auth']);
unset($_SESSION['password']);
}
private function getWhere() {
return " WHERE `login` = '".$this->login."' AND `password` = '".$this->password."'";
}
}
Массив Сессий проверил, там есть пользователь. Но на странице, вместо приветствия, выводится ошибка, неправильные данные (У меня она появляется, если  $_SESSION['error_auth'] == 1)
Профиль
28.08.2015 13:45:15 Админ-панель Сообщение #8
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

P.S. пробелы поле кавычки, перед скобкой поставил, чтоб не раздражала замена на картинку
Профиль
28.08.2015 18:23:14 Админ-панель Сообщение #9
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 177

Как я понял, у вас ошибка в методе auth в User_class.php 

Вы проверяете не пустой ли массив, но эта функция может не корректно сработать, попробуйте проверить какое-то определенное значение типу if(isset($user_data['login'])) то мы записываем в сессию.
Профиль
29.08.2015 16:10:09 Админ-панель Сообщение #10
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Да, спасибо, помогло. Проблему решил.
Профиль