CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Toogle CMS
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Другие движки
Страницы: 1, 2, 3
Skyff
sanes, причем тут категории и отключение добавления новостей, я не могу понять.
А новости практически у всех ЦМС похожи, мало что есть индивидуального.
sanes
при том, что не обязана новость иметь категорию :)
Skyff
sanes, Для меня обязательно, ЦМС создается не для узкого круга пользователей а для обширного и это функционал востребован большинством, вот было бы воплей на форуме если бы не было возможности создавать категорий. А кому надо могут новости постить без категорий, отсутствие возможности создавать категории, негативно бы сказалось на системе.
sanes
Skyff, мы с тобой на разных языках чтоль разговариваем? Не обязана - значит, я могу добавить новость не указав категорию и не создавать эти категории вообще. Кому нужны категории, ради бога, я не предлагаю их отменить :)
Skyff
sanes, В таком случая можно сказать что сайт не обязан быть на ЦМС :D
sanes
Skyff, во ёпть.. ну ты загнул. Это чё за ущемление прав? Протестую! Новость не обязана иметь категорию! Не обижайте маленьких. А то блин, все такие мегапорталы на х.. послать некого :new_russian:

Добавлено через 3 минут, 50 секунд:

http://uktehnostroy.ru куда мне тут категории пихнуть? новости вообще тут бывают иногда, с июня ни одной, даже первой :D у них вообще новости редко бывают.
Skyff
sanes, А к чему ты говоришь что не обязаны ? Конечно не обязаны... Тут все от фантазии, а если говорить о функционале, то возможность создавать категорию новостям, если есть здравый ум, то быть обязана... :D
sanes
ну вот попробуй запости новость или файл без категории в Элеанор. Сразу, ты не создал категорию, не гоже мегапортальную систему под свой ГС использовать ;)
Skyff
sanes, Каждому свое, но это можно сделать и в одной категории к примеру основной. Все логично, в принципе это настолько не актуально, что некто практически не задумывался об этом. Это только принципиально можно реализовать. а ГС вообще лучше не делать, это очень плохо :D и некрасиво...
Alexander
Цитата (sanes @ 2024-07-27 03:45)
Новости например не обязаны иметь категорию. ИМХО

Согласен. Актуально для небольших сайтов. Но вот галочки "отключить категории" - мне кажется недостаточно. Ведь на небольшом сайте нафик не нужны ни теги, ни поиск, ни другое. Эти возможно тоже сделать что-ли отключаемыми? :huh: Слишком много опций будет в таком случае... <_< Не нравится мне эта идея.

Добавлено через 2 минут, 47 секунд:

Только давайте идеи для системы будем писать в теме о первой версии.
Alexander
И еще. Я тут решил посмотреть внутренности Toogle CMS. Разочарован.

На 90% уровень разработчика можно понять, проанализировав как он фильтрует переменные.
Смотрим. Метод входа (вроде как, не утверждаю):

	function login($nick, $password)
	{
	global $db, $config;
		$db->query("DELETE FROM " . DB_PREFIX . "_online WHERE ip = '" . getRealIpAddr() . "'");
		setcookie(COOKIE_PAUSE, false, time(), '/');
		
		$password = md5($password);
		
		$access = $db->getRow($db->query("SELECT id, password, tail FROM " . DB_PREFIX . "_users WHERE nick = '" . $nick . "' AND active='1'"));

		if (md5(substr($password, 0, -strlen($access['tail'])) . $access['tail']) == $access['password']) 
		{
			delcache('userInfo_'.$this->user_id);
			$newHash = md5(@$_SERVER['HTTP_USER_AGENT']);
			setcookie(COOKIE_AUTH, base64_encode(serialize(array('id' => $access['id'], 'nick' => $nick, 'password' => md5(substr($password, 0, -strlen($access['tail'])) . $access['tail']), 'hash' => $newHash)).$config['uniqKey']), time() + COOKIE_TIME, '/');
			return true;
		} 
		else 
		{
			setcookie(COOKIE_AUTH, '', time(), '/');
			return false;
		}


Ай-яй-яй. Переменная $nick никак не фильтруется... Это очень плохо. Но... Посмотрим место вызова функции.

			if ($core->auth->login(filter($_POST['nick']), filter($_POST['password'])) == true) 
			{
				$core->tpl->redicret('Вы успешно вошли сейчас вас переместит обратно!', $_SERVER['HTTP_REFERER']);
			} 
			else 
			{
				$core->tpl->redicret('Вход не выполнен! Проверьте имя пользователя, пароль и попробуйте снова!', $_SERVER['HTTP_REFERER'], 'Ошибка!');
			}


Опа! Фильтруются все-таки переменные. Но вот "== true" писать, это уже начинает очень смущать относительно опытности программера, ведь заранее известно, что login возвращает исключительно булевы значения!

И как же фильтруются?
function filter($text, $type = false) 
{
    global $core, $security;
    if($type != 'template')
    {
        $text = preg_replace('/{%([^%]*)%}/i', '', $text);
    }

    $allowArr = explode(',', $security['allowHTML']);
    $allowHTML = '<'.implode('>,<', $allowArr).'>';
    $stopWords = explode(',', $security['stopWords']);
    foreach($stopWords as $word)
    {
        $wordReplace[$word] = $security['stopReplace'];
    }

    $text = str_replace('||men||', '<', $text);
    $text = str_replace('||and||', '&', $text);
    $text = str_replace('||bol||', '>', $text);
    $text = str_replace(array_keys($wordReplace), array_values($wordReplace), $text);

    switch($type)
    {
        default:
            //$text = urldecode($text);
            $text = strip_tags($text, $allowHTML);
            $text = trim($text);
            $text = htmlspecialchars($text, ENT_QUOTES);
            //$text = preg_replace('/{%([^%]*)%}/i', '', $text);
            break;

А вот это уже могу охарактеризовать только словом "пиздец". Потому что фильтруется и содержимое пароля! А может я хочу, чтобы у меня пароль был <script> ? Судя по коду, получается, что пароль для системы у меня будет пустым и кто угодно сможет войти. Нехорошо :(

Добавлено через 2 минут, 36 секунд:

В остальном и целом, код, скажем так, не блещет. Может модулей и побольше, чем у Eleanor CMS, но зная james-а давненько могу сказать, что со стороны его система выглядит как деградация программера.
Почитал, впитал, спасибо за поправки, признаю написал криво. Да может мой код не блещет супер качеством, но я пытаюсь программировать, я пишу и совершенствую. Я очень долго мучался и думал как организовать фильтрацию данных, но я пишу кмс один, посоветоваться мне нескем. Поэтому написал на бум, да стыдно, а кто мне поможет? Суть не в этом. Я молод, мне есть к чем стремиться. Выше, быстрее, сильнее, вроде так.
sanes
james, или ты промахнулся или нитуда. поясни. ИМХО
Цитата (Alexander @ 2024-07-27 03:45)
Опа! Фильтруются все-таки переменные. Но вот "== true" писать, это уже начинает очень смущать относительно опытности программера, ведь заранее известно, что login возвращает исключительно булевы значения!


а вот это не понял, честно скажу... может реально программер я дрянь.
	function login($nick, $password)
	{
	global $db, $config;
		$db->query("DELETE FROM " . DB_PREFIX . "_online WHERE ip = '" . getRealIpAddr() . "'");
		setcookie(COOKIE_PAUSE, false, time(), '/');
		
		$nick = filter($nick, 'a');
		$password = md5($password);
		
		$access = $db->getRow($db->query("SELECT id, password, tail FROM " . DB_PREFIX . "_users WHERE nick = '" . $nick . "' AND active='1'"));
	
		if (md5(substr($password, 0, -strlen($access['tail'])) . $access['tail']) == $access['password']) 
		{
			delcache('userInfo_'.$this->user_id);
			$newHash = md5(@$_SERVER['HTTP_USER_AGENT']);
			setcookie(COOKIE_AUTH, base64_encode(serialize(array('id' => $access['id'], 'nick' => $nick, 'password' => md5(substr($password, 0, -strlen($access['tail'])) . $access['tail']), 'hash' => $newHash)).$config['uniqKey']), time() + COOKIE_TIME, '/');
			return true;
		} 
		else 
		{
			setcookie(COOKIE_AUTH, '', time(), '/');
			return false;
		}
	}


согласно этому коду логин либо возращает true либо false.
Можешь объяснить суть замечания?

Добавлено через 0 минут, 42 секунд:

sanes, я создатель, так вышло что и разработчик Toogle CMS
Alexander
james, критику написал, считаю, обоснованную. Сразу скажу, что не хочу тебя обидеть/задеть. Просто так получается, что код действительно желает лучшего, намного лучшего.

Цитата (james @ 2024-07-27 03:45)
Я очень долго мучался и думал как организовать фильтрацию данных, но я пишу кмс один, посоветоваться мне нескем. Поэтому написал на бум, да стыдно, а кто мне поможет? Суть не в этом. Я молод, мне есть к чем стремиться. Выше, быстрее, сильнее, вроде так.

Взаимно. У меня ситуация точно такая же. Твоя главная ошибка в том, что ты делаешь фильтрацию бездумно всего абсолютно, а это в корне неправильно. Подобные глупости я встречал не только у тебя. Вот например зачем фильтровать пароль пользователя? Пользователь в этом поле волен писать, что хочет - хоть ХТМЛ, код XSS, хоть SQL. Это его дело, нам нельзя ни в коем случае как-то исправлять его фантазию. Тоже самое, касается ников пользователя - нам просто нужно правильно вывести последовательность символов, составляющую имя пользователя; и, если он хочет иметь ник <html> - это его полное право.

Цитата (james @ 2024-07-27 03:45)
Можешь объяснить суть замечания?

Могу конечно. Булевы переменные не требуют сверки значения с булевыми константами ни в одном языке программирования. Т.е. если мы написали
$var=true;

То проверку надо осуществлять так:
if($var)
{
#Код
}


Ты же осуществляешь проверку вот так:
if($var==true)
{
#Код
}

Что является нестолько ошибкой, сколько создает впечателние новичка в программировании.
Спасибо за советы, сейчас примусь за переработку, как фильтрации, так и всего кода в целом
sanes
james, удачи! Радует, что авторы в хороших отношениях.
<offtop>Совместными усилиями потопим ЛАЕД :) </offtop>
Flynt
Система хороша, и перспективна.
james, успехов вам!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.