Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#51 Re: Тестирование версий » Версия 0.9.1 RC0 [2009.08.31] » 2009-09-04 21:20:29

Почти адаптировал шаблон, но некоторые баги не смог исправить:

1. Не работает авторизация, после ввода имени и пароля в меню пользователя, выбрасывает на главную страницу, файлы usermenu.tpl и login.tpl поправил в точности по инструкции, правда login.tpl взял из стандартной поставки, "разлогин" работает нормально, залогиниться можно, только если зайти в админку и потом перейти на главную страницу сайта.

2. Умерла капча, появляется только рамка от от защитного когда, самого кода нет, см.скрин
t4fd93.gif

3. После регистрации не появляется сообщение "Спасибо за регистрацию" хотя регистрация проходит нормально.

4. И небольшой баг в профиле, не отображаются некоторые надписи, см. скрин
tdb867.gif

Как это можно поправить ? Особенно интересует вопрос с авторизацией...

#52 Re: Тестирование версий » Версия 0.9.1 RC0 [2009.08.31] » 2009-08-31 20:33:19

vitaly, какая-нибудь инструкция по адаптации своих шаблонов есть ?

#53 Re: "А как сделать..." » Ломанули сайт » 2009-08-18 16:51:13

vitaly пишет:

Давай доступ к Remote Desktop. Так всё-равно проще намного.

Выслал в ЛС, напиши как сделаешь smile

#54 Re: "А как сделать..." » Ломанули сайт » 2009-08-18 13:33:31

vitaly пишет:

zheka, наипростейший способ - запретить img/url для комментов smile
А вообще мой патч должен был сработать. Дай доступ к хостингу, посмотрю что там и поставлю патч. может я где опечатался в своём примере...

Как можно запретить img/url для комментов ?
Доступ я бы дал, но у нас доступ к этому хостингу только из локальной сети, чужие ип не пускает (( может быть попробуешь сам отредактировать этот файл и выложить код тут, я все сделал в точности как ты сказал. P.S. или могу дать доступ через удалённый рабочий стол на мой сервер, с него сможешь попасть на этот хостинг, такой вариант устроит ?

#55 Re: "А как сделать..." » Ломанули сайт » 2009-08-18 10:25:24

Понятно, т.е. эту багу с XSS в данной версии мне ни как не победить ? По поводу урезания комментариев это вариант, однако сразу отпадает т.к. не совсем корректно срабатывает... Получается остаётся ждать 0.9.1 финальный релиз ? smile

#57 Re: "А как сделать..." » Ломанули сайт » 2009-08-17 22:46:48

vitaly, что-то упорно не хочет работать, после замены выдаёт чистый лист, я поправил своё сообщение с кодом выше, посмотри как теперь там...
Вообще на сколько опасна данная штука что он проделал с сайтом ?

#58 Re: "А как сделать..." » Ломанули сайт » 2009-08-17 21:39:06

vitaly, попробовал на 2-ом компьютере домашнем, там IE он тоже ругается на XSS может от версии браузера ещё что-то зависит ? т.к на новой версии ие такого что-то не видно

В parse.class.php добавил как ты сказал после этого сайт вообще перестал открываться, вот код с добавлением тех строчек:

<?php

//
// Copyright (C) 2006-2008 Next Generation CMS (http://ngcms.ru/)
// Name: parse.class.php
// Description: Parsing and formatting routines
// Author: Vitaly Ponomarev, Alexey Zinchenko
//

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');

class parse {
	function slashes($content) {
		return (get_magic_quotes_gpc()) ? $content : addslashes($content);
	}

	function userblocks($content){
		global $config, $lang, $userROW;
		if (!$config['blocks_for_reg']) return $content;
		return preg_replace("#\[hide\]\s*(.*?)\s*\[/hide\]#is", is_array($userROW)?"$1":str_replace("{text}", $lang['not_logged'], $lang['not_logged_html']), $content);
	}


	// Scan URL and normalize it to convert to absolute path
	// Check for XSS
	function normalize_url($url){
		if (((substr($url,0,1) == "\"") && (substr($url,-1,1) == "\""))||
			((substr($url,0,1) == "'")  && (substr($url,-1,1) == "'" ))) {
			$url = substr($url, 1, strlen($url)-2);
		}

		// Check for XSS attack
		$urlXSS = str_replace(array(ord(0), ord(9), ord(10), ord(13), ' ', "'", "\"", ";"),'',$url);
		if (preg_match('/^javascript:/is', $urlXSS)) {
			return false;
		}

		// Add leading "http://" if needed
		if (!preg_match("#^(http|ftp|https|news)\://#i", $url)) {
			$url = "http://".$url;
		}
		return $url;
	}

	// Parse BB-tag params
	function parseBBCodeParams($paramLine){

		// Start scanning
		// State:
		// 0 - waiting for name
		// 1 - scanning name
		// 2 - waiting for '='
		// 3 - waiting for value
		// 4 - scanning value
		// 5 - complete
		$state = 0;
		// 0 - no quotes activated
		// 1 - single quotes activated
		// 2 - double quotes activated
		$quotes = 0;

		$keyName = '';
		$keyValue = '';
		$errorFlag = 0;

		$keys = array();

		for ($sI = 0; $sI < strlen($paramLine); $sI ++) {
			// act according current state
			$x = $paramLine{$sI};

			switch ($state) {
				case 0:  if      ($x == "'") { $quotes = 1; $state = 1; $keyName = '';}
						 else if ($x == "'") { $quotes = 2; $state = 1; $keyName = ''; }
						 else if ((($x >='A')&&($x <='Z'))||(($x >='a')&&($x <='z'))) { $state = 1; $keyName = $x; }
						 break;
				case 1:  if ((($quotes == 1)&&($x == "'"))||(($quotes == 2)&&($x == '"'))) { $quotes = 0; $state=2; }
						 else if ((($x >='A')&&($x <='Z'))||(($x >='a')&&($x <='z'))) { $keyName .= $x; }
						 else if ($x == '=') { $state = 3; }
						 else if (($x == ' ')||($x == chr(9))) { $state = 2; }
						 else { $erorFlag = 1; }
						 break;
				case 2:  if ($x == '=') { $state = 3; }
						 else if (($x == ' ')||($x == chr(9))) { ; }
						 else { $errorFlag = 1; }
						 break;
				case 3:  if      ($x == "'") { $quotes = 1; $state = 4; $keyValue = '';}
						 else if ($x == '"') { $quotes = 2; $state = 4; $keyValue = ''; }
						 else if ((($x >='A')&&($x <='Z'))||(($x >='a')&&($x <='z'))) { $state = 4; $keyValue = $x; }
						 break;
				case 4:  if ((($quotes == 1)&&($x == "'"))||(($quotes == 2)&&($x == '"'))) { $quotes = 0; $state=5; }
						 else if (!$quotes &&  (($x == ' ')||($x == chr(9)))) { $state = 5; }
						 else { $keyValue .= $x; }
						 break;
			}

			// Action in case when scanning is complete
			if ($state == 5) {
				$keys [ strtolower($keyName) ] = $keyValue;
				$state = 0;
			}
		}

		// If we finished and we're in stete "scanning value" - register this field
		if ($state == 4) {
			$keys [ strtolower($keyName) ] = $keyValue;
			$state = 0;
		}

		// If we have any other state - report an error
		if ($state) {
			$errorFlag = 1; // print "EF ($state)[".$paramLine."].";
		}

		if ($errorFlag) {
			return -1;
		}
		return $keys;
	}

	function bbcodes($content) {
		global $lang, $config, $userROW;

		if (!$config['use_bbcodes']) return $content;

		$content	=	preg_replace("#\[code\](.+?)\[/code\]#is", "<pre>$1</pre>",$content);

		$content	=	preg_replace("#\[quote\]\s*(.*?)\s*\[/quote\]#is", "<blockquote><b>".$lang['bb_quote']."</b><br />$1</blockquote>",$content);
		$content	=	preg_replace("#\[quote=(.*?)\]\s*(.*?)\s*\[/quote\]#is","<div class='answer'><b>$1 ".$lang['bb_wrote']."</b><br />$2</div>",$content);

		$content	=	preg_replace("#\[acronym\]\s*(.*?)\s*\[/acronym\]#is", "<acronym>$1</acronym>",$content);
		$content	=	preg_replace("#\[acronym=(.*?)\]\s*(.*?)\s*\[/acronym\]#is","<acronym title=\"$1\">$2</acronym>",$content);

		$content	=	preg_replace("#\[email\]\s*(\S+?)\s*\[/email\]#i", "<a href=\"mailto:$1\">$1</a>", $content);
		$content	=	preg_replace("#\[email\s*=\s*\&quot\;([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\s*\&quot\;\s*\](.*?)\[\/email\]#i", "<a href=\"mailto:$1\">$2</a>", $content);
		$content	=	preg_replace("#\[email\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/email\]#i", "<a href=\"mailto:$1\">$2</a>", $content);
		$content	=	preg_replace("#\[s\](.*?)\[/s\]#is", "<s>$1</s>", $content);
		$content	=	preg_replace("#\[b\](.+?)\[/b\]#is", "<b>$1</b>", $content);
		$content	=	preg_replace("#\[i\](.+?)\[/i\]#is", "<i>$1</i>", $content);
		$content	=	preg_replace("#\[u\](.+?)\[/u\]#is", "<u>$1</u>", $content);
		$content	=	preg_replace("#\[p\](.+?)\[/p\]#is", "<p>$1</p>", $content);
		$content	=	preg_replace("#\[ul\](.*?)\[/ul\]#is", "<ul>$1</ul>", $content);
		$content	=	preg_replace("#\[li\](.*?)\[/li\]#is", "<li>$1</li>", $content);
		$content	=	preg_replace("#\[ol\](.*?)\[/ol\]#is", "<ol>$1</ol>", $content);
		$content	=	preg_replace("#\[left\](.*?)\[/left\]#is","<p style=\"text-align: left\">$1</p>", $content);
		$content	=	preg_replace("#\[right\](.*?)\[/right\]#is","<p style=\"text-align: right\">$1</p>", $content);
		$content	=	preg_replace("#\[center\](.*?)\[/center\]#is","<p style=\"text-align: center\">$1</p>", $content);

		// Process spoilers
		$content	=	preg_replace("#\[spoiler\](.*?)\[/spoiler\]#is", '<div class="spoiler"><div class="sp-head" onclick="toggleSpoiler(this.parentNode, this);"><b></b>'.$lang['bb_spoiler'].'</div><div class="sp-body">$1</div></div>', $content);
		$content	=	preg_replace("#\[spoiler=\"(.+?)\"\](.*?)\[/spoiler\]#is", '<div class="spoiler"><div class="sp-head" onclick="toggleSpoiler(this.parentNode, this);"><b></b>$1</div><div class="sp-body">$2</div></div>', $content);

		// Process Images
		// Possible format:
		// '[img' + ( '=' or ' ' ) + URL + flags + ']' + alt + '[/url]'
		// '[img' + flags ']' + url + '[/url]'
		// Allower flags:
		// width
		// height
		// border
		// align: 'left', 'right', 'center'
		// class: anything

		if (preg_match_all("#\[img(\=| *)(.*?)\](.*?)\[\/img\]#is", $content, $pcatch, PREG_SET_ORDER)) {
			$rsrc = array();
			$rdest = array();
			// Scan all IMG tags
			foreach ($pcatch as $catch) {

				// Init variables
				list ($line, $null, $paramLine, $alt) = $catch;
				array_push($rsrc, $line);

				// Check for possible error in case of using "]" within params/url
				// Ex: [url=file[my][super].avi" target="_blank]F[i]LE[/url] is parsed incorrectly
				if ((strpos($alt, ']') !== false) && (strpos($alt, "\"") !== false)) {
					// Possible bracket error. Make deep analysis
					$jline = $paramLine.']'.$alt;
					$brk = 0;
					$jlen = strlen($jline);
					for ($ji = 0; $ji < $jlen; $ji++) {
						if ($jline[$ji] == "\"") {
							$brk = !$brk;
							continue;
						}

						if ((!$brk) && ($jline[$ji] == ']')) {
							// Found correct delimiter
							$paramLine = substr($jline, 0, $ji);
							$alt = substr($jline, $ji+1);
							break;
						}
					}
				}

				$outkeys = array();

				// Make a parametric line with url
				if (trim($paramLine)) {
					// Parse params
					$paramLine = "src=".$paramLine;
					$keys = $this->parseBBCodeParams($paramLine);
				} else {
					// No params to scan
					$keys = array();
				}

				// Return an error if BB code is bad
				if (!is_array($keys)) {
					array_push($rdest,'[INVALID IMG BB CODE]');
					continue;
				}

				$keys['alt'] = $alt;
				
				$tgt_url = (!$keys['src'])?$alt:$keys['src']);
    if ((!preg_match('#^http\:\/\/#', $tgt_url, $null)) && (!preg_match('#^\/#', $tgt_url, $null))) {
        array_push($rdest,'[INVALID IMG BB CODE]');
        continue;
    }
				// Now let's compose a resulting URL
				$outkeys [] = 'src="'.((!$keys['src'])?$alt:$keys['src']).'"';

				// Now parse allowed tags and add it into output line
				foreach ($keys as $kn => $kv) {
					switch ($kn) {
						case 'width':
						case 'height':
						case 'border':
								$outkeys[] = $kn.'="'.intval($kv).'"';
								break;
						case 'align':
							if (in_array(strtolower($kv), array( 'left', 'right', 'middle', 'top', 'bottom')))
								$outkeys[] = $kn.'="'.strtolower($kv).'"';
							break;
						case 'class':
							$v = str_replace(array(ord(0), ord(9), ord(10), ord(13), ' ', "'", "\"", ";", ":", '<', '>', '&'),'',$kv);
							$outkeys [] = $kn.'="'.$v.'"';
							break;
						case 'alt':
							$v = str_replace(array("\"", ord(0), ord(9), ord(10), ord(13), ":", '<', '>', '&'),array("'",''),$kv);
							$outkeys [] = $kn.'="'.$v.'"';
							break;
					}
				}
				// Fill an output replacing array
				array_push($rdest, "<img ".(implode(" ", $outkeys)).' />');
			}
			$content = str_replace($rsrc, $rdest, $content);
		}


		// Process URLS
		// Possible format:
		// '[url' + ( '=' or ' ' ) + URL + flags + ']' + Name + '[/url]'
		// '[url' + flags ']' + url + '[/url]'
		// Allower flags:
		// target: anything
		// class: anything
		// title: anything

		if (preg_match_all("#\[url(\=| *)(.*?)\](.*?)\[\/url\]#is", $content, $pcatch, PREG_SET_ORDER)) {
			$rsrc = array();
			$rdest = array();
			// Scan all URL tags
			foreach ($pcatch as $catch) {

				// Init variables
				list ($line, $null, $paramLine, $alt) = $catch;
				array_push($rsrc, $line);

				// Check for possible error in case of using "]" within params/url
				// Ex: [url=file[my][super].avi" target="_blank]F[i]LE[/url] is parsed incorrectly
				if ((strpos($alt, ']') !== false) && (strpos($alt, "\"") !== false)) {
					// Possible bracket error. Make deep analysis
					$jline = $paramLine.']'.$alt;
					$brk = 0;
					$jlen = strlen($jline);
					for ($ji = 0; $ji < $jlen; $ji++) {
						if ($jline[$ji] == "\"") {
							$brk = !$brk;
							continue;
						}

						if ((!$brk) && ($jline[$ji] == ']')) {
							// Found correct delimiter
							$paramLine = substr($jline, 0, $ji);
							$alt = substr($jline, $ji+1);
							break;
						}
					}
				}

				$outkeys = array();

				// Make a parametric line with url
				if (trim($paramLine)) {
					// Parse params
					$paramLine = "href=".$paramLine;
					$keys = $this->parseBBCodeParams($paramLine);
				} else {
					// No params to scan
					$keys = array();
				}

				// Return an error if BB code is bad
				if (!is_array($keys)) {
					array_push($rdest,'[INVALID URL BB CODE]');
					continue;
				}

               $tgt_url = (!$keys['src'])?$alt:$keys['src']);
    if ((!preg_match('#^http\:\/\/#', $tgt_url, $null)) && (!preg_match('#^\/#', $tgt_url, $null))) {
        array_push($rdest,'[INVALID URL BB CODE]');
        continue;
    }
				// Now let's compose a resulting URL
				$outkeys [] = 'href="'.((!$keys['href'])?$alt:$keys['href']).'"';

				// Now parse allowed tags and add it into output line
				foreach ($keys as $kn => $kv) {
					switch ($kn) {
						case 'class':
						case 'target':
							$v = str_replace(array(ord(0), ord(9), ord(10), ord(13), ' ', "'", "\"", ";", ":", '<', '>', '&'),'',$kv);
							$outkeys [] = $kn.'="'.$v.'"';
							break;
						case 'title':
							$v = str_replace(array("\"", ord(0), ord(9), ord(10), ord(13), ":", '<', '>', '&'),array("'",''),$kv);
							$outkeys [] = $kn.'="'.$v.'"';
							break;
					}
				}
				// Fill an output replacing array
				array_push($rdest, "<a ".(implode(" ", $outkeys)).">".$alt.'</a>');
			}
			$content = str_replace($rsrc, $rdest, $content);
		}

        // Обработка кириллических символов для украинского языка
        $content	=	str_replace(array('[CYR_I]', '[CYR_i]', '[CYR_E]', '[CYR_e]', '[CYR_II]', '[CYR_ii]'), array('І', 'і', 'Є', 'є', 'Ї', 'ї'), $content);

		// Авто-подсветка URL'ов в тексте новости
		$content	=	preg_replace("#(^|\s)((http|https|news|ftp)://\w+[^\s\[\]\<]+)#i", "$1<a href='$2' target='_blank'>$2</a>", $content);

		while (preg_match("#\[color=([^\]]+)\](.+?)\[/color\]#ies", $content)) {
			$content = preg_replace("#\[color=([^\]]+)\](.+?)\[/color\]#ies"  , "\$this->color(array('style'=>'$1','text'=>'$2'))", $content);
		}
		return $content;
	}

	function htmlformatter($content) {
		global $config;

		if (!$config['use_htmlformatter'])
			return $content;

		$content	=	preg_replace('|<br />\s*<br />|', "\n\n", $content);
		$content	=	str_replace(array("\r\n", "\r"), "\n", $content);
		$content	=	preg_replace("/\n\n+/", "\n\n", $content);
		$content	=	preg_replace('/\n/', "<br />", $content);
		$content	=	preg_replace('!<p>\s*(</?(?:table|thead|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $content);
		$content	=	preg_replace("|<p>(<li.+?)</p>|", "$1", $content);
		$content	=	preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $content);
		$content	=	str_replace('</blockquote></p>', '</p></blockquote>', $content);
		$content	=	preg_replace('!<p>\s*(</?(?:table|thead|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|math|p|h[1-6])[^>]*>)!', "$1", $content);
		$content	=	preg_replace('!(</?(?:table|thead|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $content);
		$content	=	preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $content);
		$content	=	preg_replace('!(</?(?:table|thead|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|math|p|h[1-6])[^>]*>)\s*<br />!', "$1", $content);
		$content	=	preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)!', '$1', $content);
		$content	=	preg_replace("/<code>(.*?)<\/code>/es", "phphighlight('$1')", $content);
		$content	=	str_replace("\n</p>\n", "</p>", $content);

		return $content;
	}

	function smilies($content) {
		global $config;

		if (!$config['use_smilies'])
			return $content;

		$smilies_arr	=	explode(",", $config['smilies']);
		foreach ($smilies_arr as $null => $smile) {
			$smile		=	trim($smile);
			$find[]		=	"':$smile:'";
			$replace[]	=	"<img class=\"smilies\" alt=\"$smile\" src=\"".skins_url."/smilies/$smile.gif\" />";
		}
		return preg_replace($find, $replace, $content);
	}

	function translit($content, $allowDash = 0) {

		$utf2enS = array('А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'h', 'Ґ' => 'g', 'Д' => 'd', 'Е' => 'e', 'Ё' => 'jo', 'Є' => 'e', 'Ж' => 'zh', 'З' => 'z', 'И' => 'i', 'І' => 'i', 'Й' => 'i', 'Ї' => 'i', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n', 'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u', 'Ў' => 'u', 'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c', 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'sz', 'Ъ' => '', 'Ы' => 'y', 'Ь' => '', 'Э' => 'e', 'Ю' => 'yu', 'Я' => 'ya');
		$utf2enB = array('а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'ґ' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'jo', 'є' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'і' => 'i', 'й' => 'i', 'ї' => 'i', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ў' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sz', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', '"' => '', '&' => '', 'µ' => 'u', '№' => 'num');

		$content = trim(strip_tags($content));
		$content = strtr($content, $utf2enS);
		$content = strtr($content, $utf2enB);
		$content = preg_replace("/\s+/ms", "_", $content);
		$content = preg_replace("/[ ]+/", "_", $content);

		$cut = ($allowDash)?"/[^a-z0-9_\-\.]+/mi":"/[^a-z0-9_\.]+/mi";
		$content = preg_replace($cut, "", $content);

		return $content;
	}

	function color($arr) {

		$style = $arr['style'];
		$text  = $arr['text'];
		$style = str_replace('"', '', $style);
		$style = preg_replace("/[&\(\)\.\%\[\]<>\'\"]/", "", preg_replace( "#^(.+?)(?:;|$)#", "$1", $style ));
		$style = preg_replace("/[^\d\w\#\s]/s", "", $style);

		return "<span style=\"color:".$style."\">".$text."</span>";
	}

	// Functions for HTML truncator
	function joinAttributes($attributes){
		$alist = array();
		foreach ($attributes as $aname => $aval) {
			$mark = (strpos($aval, '"') === FALSE)?'"':"'";
			$alist [] = $aname.'='.$mark.$aval.$mark;
		}
		return join(" ", $alist);
	}

	function truncateHTML ( $text, $size = 50, $finisher = '...' ) {

		$len = strlen($text);

		if ($len <= $size)
			return $text;

		$textLen = 0;
		$position  = -1;
		$tagNameStartPos = 0;
		$tagNameEndPos = 0;
		$openTagList = array();

		// Stateful machine status
		// 0 - scanning text
		// 1 - scanning tag name
		// 2 - scanning tag content
		// 3 - scanning tag attribute value
		// 4 - waiting for tag close mark
		$state = 0;

		// 0 - no quotes active
		// 1 - single quotes active
		// 2 - double quotes active
		$quoteType = 0;

		// Flag if 'tag close symbol' is used
		$closeFlag = 0;

		while ((($position+1) < $len) && ($textLen < $size)) {
			$position++;
			$char = $text{$position};
		//	printf("%03u[%u][%03u][%02u] %s\n", $position, $state, $textLen, count($openTagList), $char);

			switch ($state) {
				// Scanning text
				case 0:
					// '<' - way to starting tag
					if ($char == '<') {
						$state = 1;
						$tagNameStartPos = $position+1;
						continue;
					}
					$textLen++;

					break;
				case 1:
					// If this is a space/tab - tag name is finished
					if (($char == ' ')||($char == "\t")) {
						$tagNameLen = $position - $tagNameStartPos;
						$state = 2;
						continue;
					}

					// Activity on tag close flag
					if ($char == '/') {
						if ($tagNameStartPos == $position)
							continue;

						$tagNameLen = $position - $tagNameStartPos + 1;
						$state = 4;
						continue;
					}

					// Action on tag closing
					if ($char == '>') {
						$tagNameLen = $position - $tagNameStartPos;
						$tagName = substr($text, $tagNameStartPos, $tagNameLen);
				//		print "openTag[1]: $tagName\n";

						// Closing tag
						if ($tagName{0} == '/') {
							if ((count($openTagList)) && ($openTagList[count($openTagList)-1] == substr($tagName, 1)))
								array_pop($openTagList);
						} else {
							// Opening tag
							if (substr($tagName, -1, 1) != '/') {
								// And not closed at the same time
								array_push($openTagList, $tagName);
							}
						}
						$state = 0;
						continue;
					}

					// Tag name may contain only english letters
					if (!((($char >= 'A') && ($char <= 'Z')) || (($char >= 'a') && ($char <= 'z')))) {
						$state = 0;
						continue;
					}
					break;
				case 2:
					// Activity on tag close flag
					if ($char == '/') {
						$state = 4;
						continue;
					}

					// Action on tag closing
					if ($char == '>') {
						$tagName = substr($text, $tagNameStartPos, $tagNameLen);
				//		print "openTag: $tagName\n";

						// Closing tag
						if ((count($openTagList)) && ($openTagList[count($openTagList)-1] == substr($tagName, 1))) {
							if ($openTagList[count($openTagList)] == substr($tagName, 1))
								array_pop($openTagList);
						} else {
							// Opening tag
							if (substr($tagName, -1, 1) != '/') {
								// And not closed at the same time
								array_push($openTagList, $tagName);
							}
						}
						$state = 0;
						continue;
					}

					// Action on quote
					if (($char == '"')||($char == "'")) {
						$quoteType = ($char == '"')?2:1;
						$state = 3;
						continue;
					}
					break;
				case 3:
					// Act only on quote
					if ((($char == '"') && ($quoteType == 2)) || (($char == "'") && ($quoteType == 1))) {
						$state = 2;
						continue;
					}
					break;
				case 4:
					// Only spaces or tag close mark is accepted
					if (($char == ' ') || ($char == "\t")) {
						continue;
					}

					if ($char == '>') {
						$tagName = substr($text, $tagNameStartPos, $tagNameLen);
			//			print "openTag: $tagName\n";

						// Closing tag
						if ($tagName{0} != '/') {
							if ((count($openTagList)) && ($openTagList[count($openTagList)-1] == substr($tagName, 1)))
								array_pop($openTagList);
						} else {
							// Opening tag
							if (substr($tagName, -1, 1) != '/') {
								// And not closed at the same time
								array_push($openTagList, $tagName);
							}
						}
						$state = 0;
						continue;
					}

					// Wrong symbol [ this is wholy text ]
					$state = 0;
					break;
			}
		}

		$output = substr($text, 0, $position+1) . ((($position+1) != $len)?$finisher:'');

		// Check if we have opened tags
		while ($tag = array_pop($openTagList))
			$output .= "</".$tag.">";

		return $output;
	}
}

#59 Re: "А как сделать..." » Ломанули сайт » 2009-08-17 21:11:09

Проверяю у себя на IE не срабатывает такое, знакомый проверяет на своём компьютере на IE у него срабатывает, проверили на FireFox тоже не срабатывает, на опере срабатывает. вот такие дела...

#60 Re: "А как сделать..." » Ломанули сайт » 2009-08-17 21:08:56

vitaly пишет:

Тебе ведь в таком виде комментарий оставили?
Попробовал только что - не получается.

И обновись именно до последней версии - к 0.9.0 было ещё несколько FixPack'ов, последний доступен тут

Да именно в таком, ты вот сейчас написал и у меня по крайней мере на опере выскочило опять сообщение о XSS
Мне надо поверх всего залить только FixPack #04 по твоей ссылке ?

#61 Re: "А как сделать..." » Ломанули сайт » 2009-08-17 20:44:48

vitaly пишет:

URL?
И проверь, стоит ли у тебя последний FixPack.

Стоит [15.11.2008] 0.9.0 Release

URL сейчас отправлю в личку, правда то сообщение которое:

[img]javascript:alert('XSS')[/img]

я в двух местах удалил, теперь то сообщение не выскакивает, но это не решает проблему как-то же он это провернул и где-то в коде факт оставил ещё следы...

#62 "А как сделать..." » Ломанули сайт » 2009-08-17 20:32:00

zheka
Ответов: 17

Ну вот и случилось, ломанули меня = ) Собственно вопрос где латать дыру, при заходе на сайт выскакивает сообщение JavaScrip, два сообщения:

1-ое

XSS

жмём ок, далее

2-ое

XaсKed by...

в сообщениях в комментариях нашёл текст написанный им

[img]javascript:alert('XSS')[/img]

Где-то уязвимость XSS, собственно вопрос как это дело залатать ?

Стоит 0.9.0 Release

#63 Re: Тестирование версий » Версия 0.9.1 beta0 [2009.07.23] » 2009-07-26 09:33:54

vitaly, в блокировке IP-адресов, будет ли когда доступна функция которая полностью перекрывает доступ на сайт, которая в данный момент есть, но не активна ?

#64 Re: Запросы плагинов » Плагин торрент-трекера для NGCMS [вознаграждение $100] » 2009-07-17 17:25:29

Так что-то изменилось в истории создания данного плагина ? Будет ли он выложен хоть в каком-то виде ?

#65 Re: "А как сделать..." » Статус пользователя в комментариях » 2009-07-13 10:38:32

Всем спасибо за помощь, но теперь возникла какая-то странная проблема, сделал как написал insider Иногда происходит какой-то глюк незарегистрированные пользователи при написании комментариев попадают в группу Администратор, см. скрин во вложении. Как можно это поправить ?

#66 "А как сделать..." » Статус пользователя в комментариях » 2009-07-09 16:44:04

zheka
Ответов: 8

Подскажите как сделать чтобы в шаблоне comments.show.tpl работали параметры которые отображают статус пользователя Администратор, редактор итд.. которые {l_status} и {status} из шаблона users.tpl Спасибо = )

#67 Re: Архив плагинов » Плагин :: user ranks » 2009-07-07 22:58:53

Заметил какую-то странную вещь... например пишу я комментарий, написал, отправил
вижу: Рейтинг: {plugins_user_ranks}

обновляю страничку

вижу: Рейтинг: Новичок

В чём может быть проблема ?

#68 "А как сделать..." » Звуковое сопровождение » 2009-05-20 12:42:23

zheka
Ответов: 3

Сойри за ламерский вопрос smile Может кто подскажет как сделать чтобы при открытии главной страницы моего сайта воспроизводился определённый мп3 файл каторый лежит на хостинге, желательно чтобы это было только для главной страницы и не срабатывало в категориях, чтобы музыка сработала только один раз и не играла потом по 100 раз ) Как такое можно реализовать ?

#69 Re: Страницы плагинов » jCHAT :: AJAX чат для сайта » 2009-02-09 20:22:20

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

#70 Re: Запросы плагинов » Плагин, который выводит последние сообщения с форума IPB » 2009-01-07 15:31:30

Может кому пригодиться делается это так, в php файле плагина заменяем в 53 строке

'.$row[tid].'" title="'.$row[description].'">

на

'.$row[tid].'&view=getnewpost" title="'.$row[description].'">

#71 Re: Запросы плагинов » Плагин, который выводит последние сообщения с форума IPB » 2009-01-06 19:56:35

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

#72 Re: Флейм » Проведение розыгрышей призов среди посетителей. Ваши идеи? » 2009-01-04 18:42:15

По поводу конкурсов хорошая идея, особенно тех в которых пользователи окажут помощь проекту например как и говорилось выше в поиске багов в новых релизах... smile

#73 Re: "А как сделать..." » Журналист, как его новости не подтверждать? » 2009-01-02 20:23:50

ROZARD, Сейчас только всё проверил работает как надо, спасибо за помощь вопрос исчерпан, респект и уважуха тебе wink

#74 Re: "А как сделать..." » Журналист, как его новости не подтверждать? » 2009-01-02 00:28:30

ROZARD, ага всё верно ) просто я по привычке новости через админ-панель добавляю и вот что странно, если нажать кнопку добавить новость, а потом дополнительно, параметры (Опубликовать, Отобразить на главной, Разрешить комментарии итд.. ) есть. А если проделать тоже самое через админку, то там такое поле вообще скрыто, т.о надпись Дополнительно есть а внизу параметров нету... или так и должно быть? Просто хотелось бы чтобы у журналиста были такие же опции как у редактора только на свои новости через админ панель ( массовое удаление новостей итд.. ) smile

#75 Re: "А как сделать..." » Журналист, как его новости не подтверждать? » 2009-01-01 23:52:06

ROZARD, нужно чтобы журналист при редактировании своей новости видел блок дополнительно (Опубликовать, Отобразить на главной, Разрешить комментарии, Добавить в закладки, Прикрепить, Отключить автоформатирование, Разрешить использовать HTML теги ) чтобы сам мог выставить нужные ему параметры, сейчас это меню скрыто... Странно, я так же отредактировал фаил www\engine\actions\addnews.php, но почему-то новости не публикуются, т.о надо подтверждать админу, проверял на денвере.

Подвал раздела

Работает на FluxBB