<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

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

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

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

Подписавшись по 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 через вывод, а символы можно экранировать смело не перед внесением в базу, а непосредственно каждый раз при парсинге кодов, суть не меняетсч
Профиль Ответить