<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

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

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

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

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

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

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

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

Каким движком Вы предпочитаете пользоваться?

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

Класс бб-кодов
24.11.2012 18:27:46 Класс бб-кодов Сообщение #1
malina95

malina95

Мастер

Мастер

Дата регистрации:
15.07.2012 07:13:44

Сообщений: 208

Здравствуйте, я тут наткнулся на класс для преобразований бб-кодов.

Вот он собственно:

class bbcode {
public function bbcode2html($message, $is_cut = 1) {
$preg = array(
'/(?<!\\\\)\[color(?::\w+)?=(.*?)\](.*?)\[\/color(?::\w+)?\]/si' => "<span style=\"color:\\1\">\\2</span>",
'/(?<!\\\\)\[size(?::\w+)?=(.*?)\](.*?)\[\/size(?::\w+)?\]/si' => "<span style=\"font-size:\\1\">\\2</span>",
'/(?<!\\\\)\[font(?::\w+)?=(.*?)\](.*?)\[\/font(?::\w+)?\]/si' => "<span style=\"font-family:\\1\">\\2</span>",
'/(?<!\\\\)\[align(?::\w+)?=(.*?)\](.*?)\[\/align(?::\w+)?\]/si' => "<div style=\"text-align:\\1\">\\2</div>",
'/(?<!\\\\)\[b(?::\w+)?\](.*?)\[\/b(?::\w+)?\]/si' => "<span style=\"font-weight:bold\">\\1</span>",
'/(?<!\\\\)\[i(?::\w+)?\](.*?)\[\/i(?::\w+)?\]/si' => "<span style=\"font-style:italic\">\\1</span>",
'/(?<!\\\\)\[u(?::\w+)?\](.*?)\[\/u(?::\w+)?\]/si' => "<span style=\"text-decoration:underline\">\\1</span>",
'/(?<!\\\\)\[center(?::\w+)?\](.*?)\[\/center(?::\w+)?\]/si' => "<div style=\"text-align:center\">\\1</div>",
// [cut]
'/(?<!\\\\)\[cut(?::\w+)?\](.*?)\[\/cut(?::\w+)?\]/si' => "\\1",
// [code] & [sql]
'/(?<!\\\\)\[sql(?::\w+)?\](.*?)\[\/sql(?::\w+)?\]/sie' => "highlight_sql('\\1');",
'/(?<!\\\\)\[code(?::\w+)?\](.*?)\[\/code(?::\w+)?\]/sie' => "highlight_code('\\1');",
'/(?<!\\\\)\[php(?::\w+)?\](.*?)\[\/php(?::\w+)?\]/ise' => "highlight_php('\\1');",
// [email]
'/(?<!\\\\)\[email(?::\w+)?\](.*?)\[\/email(?::\w+)?\]/si' => "<a href=\"mailto:\\1\" class=\"bb-email\">\\1</a>",
'/(?<!\\\\)\[email(?::\w+)?=(.*?)\](.*?)\[\/email(?::\w+)?\]/si' => "<a href=\"mailto:\\1\" class=\"bb-email\">\\2</a>",
// [url]
'/(?<!\\\\)\[url(?::\w+)?\]www\.(.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"http://www.\\1\" target=\"_blank\" class=\"bburl\">\\1</a>",
'/(?<!\\\\)\[url(?::\w+)?\](.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"\\1\" target=\"_blank\" class=\"bb-url\">\\1</a>",
'/(?<!\\\\)\[url(?::\w+)?=(.*?)?\](.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"\\1\" target=\"_blank\" class=\"bb-url\">\\2</a>",
// [img]
'/(?<!\\\\)\[img(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si' => "<img src=\"\\1\" alt=\"\\1\" class=\"bb-image\" />",
'/(?<!\\\\)\[img(?::\w+)?=(.*?)x(.*?)\](.*?)\[\/img(?::\w+)?\]/si' => "<img width=\"\\1\" height=\"\\2\" src=\"\\3\" alt=\"\\3\"class=\"bb-image\" />",
// [quote]
'/(?<!\\\\)\[quote(?::\w+)?\](.*?)\[\/quote(?::\w+)?\]/si' => "<div>Quote:<div class=\"bb-quote\">\\1</div></div>",
'/(?<!\\\\)\[quote(?::\w+)?=(?:&quot;|"|\')?(.*?)["\']?(?:&quot;|"|\')?\](.*?)\[\/quote\]/si' => "<div>Quote \\1:<div class=\"bb-quote\">\\2</div></div>",
// [list]
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\*(?::\w+)?\](.*?)(?=(?:\s*<br\s*\/?>\s*)?\[\*|(?:\s*<br\s*\/?>\s*)?\[\/?list)/si' => "\n<li class=\"bb-listitem\">\\1</li>",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list(?!u|o)\w+)?\](?:<br\s*\/?>?/si' => "\n</ul>",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:u(:\w+)?\](?:<br\s*\/?>?/si' => "\n</ul>",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:o(:\w+)?\](?:<br\s*\/?>?/si' => "\n</ol>",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?!u|o)\w+)?\]\s*(?:<br\s*\/?>?/si' => "\n<ul class=\"bb-list-unordered\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:u(:\w+)?\]\s*(?:<br\s*\/?>?/si' => "\n<ul class=\"bb-list-unordered\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:o(:\w+)?\]\s*(?:<br\s*\/?>?/si' => "\n<ol class=\"bb-list-ordered\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=1\]\s*(?:<br\s*\/?>?/si' => "\n<ol class=\"bb-list-ordered,bb-listordered-d\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=i\]\s*(?:<br\s*\/?>?/s' => "\n<ol class=\"bb-list-ordered,bb-listordered-lr\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=I\]\s*(?:<br\s*\/?>?/s' => "\n<ol class=\"bb-list-ordered,bb-listordered-ur\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=a\]\s*(?:<br\s*\/?>?/s' => "\n<ol class=\"bb-list-ordered,bb-listordered-la\">",
'/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=A\]\s*(?:<br\s*\/?>?/s' => "\n<ol class=\"bb-list-ordered,bb-listordered-ua\">",
// escaped tags like \[b], \[color], \[url], ...
'/\\\\(\[\/?\w+(?::\w+)*\])/'=> "\\1";
if ($is_cut == 1) {$preg['/(?<!\\\\)\[cut(?::\w+)?\](.*?)\[\/cut(?::\w+)?\]/si']='';}
$message = preg_replace(array_keys($preg), array_values($preg), $message);
return $message;
}

public function highlight_php($str) {
$tags_exists = true;
$res = htmlspecialchars($str);
$res = str_replace(array('&lt;?php', '&lt;?', '?&gt;', '-&gt;', '=&gt'), array('<?php', '<?', '?>', '->', '=>'), $res);
if (strpos('<?', $res) === false) {
$res = '<?php '.$res.' ?>';
$tags_exists = false;
}
$res = '<code class="code">'.highlight_string($res, true).'</code>';
if (!$tags_exists) {
$res = str_replace(array('&lt;?php', '&lt;?', '?&gt;', '<br/>'), array('', '', '', ''), $res);
}
return $res;
}

public function highlight_code($str) {
$res = '<code class="code">'.htmlspecialchars($str).'</code>';
return $res;
}

public function highlight_sql($str) {
$words = array('add', 'auto_increment', 'all', 'alter', 'analyze', 'and',
'as', 'asc', 'before', 'between', 'bigint', 'binary', 'blob',
'both', 'by', 'cascade', 'case', 'change', 'character', 'check', 'collate',
'column', 'columns', 'constraint', 'convert', 'create', 'cross', 'current_date',
'current_time', 'current_timestamp', 'current_user', 'database', 'databases', 'day_hour',
'day_microsecond', 'day_minute', 'day_second', 'dec', 'decimal', 'default', 'delayed',
'delete', 'desc', 'describe', 'distinct', 'distinctrow', 'div',
'double', 'drop', 'dual', 'else', 'enclosed', 'escaped', 'exists',
'explain', 'false', 'fields', 'float', 'float4', 'float8', 'for',
'force', 'foreign', 'from', 'fulltext', 'grant', 'group', 'having',
'high_priority', 'hour_microsecond', 'hour_minute', 'hour_second',
'if', 'ignore', 'in', 'index', 'infile', 'inner', 'insert', 'int',
'int1', 'int2', 'int3', 'int4', 'int8', 'integer', 'interval',
'into', 'is', 'join', 'key', 'keys', 'kill', 'leading', 'minute_second',
'left', 'like', 'limit', 'lines', 'load', 'localtime', 'mod',
'localtimestamp', 'lock', 'long', 'longblob', 'longtext', 'low_priority',
'match', 'mediumblob', 'mediumint', 'mediumtext', 'middleint', 'minute_microsecond',
'natural', 'not', 'no_write_to_binlog', 'null', 'numeric', 'on',
'optimize', 'option', 'optionally', 'or', 'order', 'outer',
'outfile', 'precision', 'primary', 'privileges', 'procedure',
'purge', 'raid0', 'read', 'real', 'references', 'regexp', 'rename',
'replace', 'require', 'restrict', 'revoke', 'right', 'rlike',
'second_microsecond', 'select', 'separator', 'set', 'show', 'smallint',
'soname', 'spatial', 'sql_big_result', 'sql_calc_found_rows',
'sql_small_result', 'ssl', 'starting', 'straight_join', 'table', 'tables',
'terminated', 'then', 'tinyblob', 'tinyint', 'tinytext', 'text', 'to',
'trailing', 'true', 'union', 'unique', 'unlock', 'unsigned', 'update',
'usage', 'use', 'using', 'utc_date', 'utc_time', 'utc_timestamp',
'values', 'varbinary', 'varcharacter', 'varchar', 'varying', 'when', 'where',
'with', 'write', 'x509', 'xor', 'year_month', 'zerofill',
'char');

foreach ($words as $word) {
$patterns[] = '/\b'.$word.'\b/i';
$WORDS[] = '<span class="bb-sql-word">'.strtoupper($word).'</span>';
}

$res = '<code class="code">'.preg_replace($patterns, $WORDS, $str).'</code>';
return $res;
}
}


Дело в том что если я заношу в базу уже с преобразованиями > на &lt; то при выходе опять же проебразуется обратно и получается ерунда... Если я уберу в классе проебразования а именно в функции highlight_php то выдаёт какую-то ошибку в классе, как бы его переделать так чтобы всё было нормально? Я обращаюсь к знающим ООП или начинающим его изучать... Он мне понравился тем что подсвечивает весь код какой бы он нибыл, но веть если в базу заносить без htmlspecialchars то вполне возможен взлом, как поступить в этой ситуации?
Профиль Ответить
26.11.2012 16:20:13 Класс бб-кодов Сообщение #2
mischa.samolkaev

mischa.samolkaev

Продвинутый

Продвинутый

Дата регистрации:
12.07.2012 13:00:02

Сообщений: 74

Взлом происходит при исполнении Js через вывод, а символы можно экранировать смело не перед внесением в базу, а непосредственно каждый раз при парсинге кодов, суть не меняетсч
Профиль Ответить