mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-30 21:45:01 +03:00
fix раскрытия путей и XSS
This commit is contained in:
parent
8f721b320d
commit
83c1558738
|
@ -75,6 +75,67 @@ return array(
|
||||||
array('border'=>'#int','cellpadding'=>'#int','cellspacing'=>'#int','align'=>array('right', 'left', 'center'),'height'=>'#int','width'=>'#int')
|
array('border'=>'#int','cellpadding'=>'#int','cellspacing'=>'#int','align'=>array('right', 'left', 'center'),'height'=>'#int','width'=>'#int')
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
// допустимые комбинации значений у параметров
|
||||||
|
'cfgSetTagParamCombination' => array(
|
||||||
|
array(
|
||||||
|
'param',
|
||||||
|
'name',
|
||||||
|
array(
|
||||||
|
'allowScriptAccess' => array(
|
||||||
|
'value'=>array('sameDomain'),
|
||||||
|
),
|
||||||
|
'movie' => array(
|
||||||
|
'value'=>array('#domain'=>array('youtube.com','rutube.ru','vimeo.com')),
|
||||||
|
),
|
||||||
|
'align' => array(
|
||||||
|
'value'=>array('bottom','middle','top','left','right'),
|
||||||
|
),
|
||||||
|
'base' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'bgcolor' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'border' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'devicefont' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'flashVars' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'hspace' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'quality' => array(
|
||||||
|
'value'=>array('low','medium','high','autolow','autohigh','best'),
|
||||||
|
),
|
||||||
|
'salign' => array(
|
||||||
|
'value'=>array('L','T','R','B','TL','TR','BL','BR'),
|
||||||
|
),
|
||||||
|
'scale' => array(
|
||||||
|
'value'=>array('scale','showall','noborder','exactfit'),
|
||||||
|
),
|
||||||
|
'tabindex' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'title' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'type' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'vspace' => array(
|
||||||
|
'value'=>true,
|
||||||
|
),
|
||||||
|
'wmode' => array(
|
||||||
|
'value'=>array('window','opaque','transparent'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
true, // Удалять тег, если нет основного значения параметра в списке комбинаций
|
||||||
|
),
|
||||||
|
),
|
||||||
// Параметры тегов являющиеся обязательными
|
// Параметры тегов являющиеся обязательными
|
||||||
'cfgSetTagParamsRequired' => array(
|
'cfgSetTagParamsRequired' => array(
|
||||||
array(
|
array(
|
||||||
|
|
85
engine/lib/external/Jevix/jevix.class.php
vendored
85
engine/lib/external/Jevix/jevix.class.php
vendored
|
@ -157,6 +157,7 @@ class Jevix{
|
||||||
const TR_TAG_CALLBACK = 15; // Тег обрабатывается callback-функцией - в обработку уходит только контент тега(короткие теги не обрабатываются)
|
const TR_TAG_CALLBACK = 15; // Тег обрабатывается callback-функцией - в обработку уходит только контент тега(короткие теги не обрабатываются)
|
||||||
const TR_TAG_BLOCK_TYPE = 16; // Тег после которого не нужна автоподстановка доп. <br>
|
const TR_TAG_BLOCK_TYPE = 16; // Тег после которого не нужна автоподстановка доп. <br>
|
||||||
const TR_TAG_CALLBACK_FULL = 17; // Тег обрабатывается callback-функцией - в обработку уходит весь тег
|
const TR_TAG_CALLBACK_FULL = 17; // Тег обрабатывается callback-функцией - в обработку уходит весь тег
|
||||||
|
const TR_PARAM_COMBINATION = 18; // Проверка на возможные комбинации значений параметров тега
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Классы символов генерируются symclass.php
|
* Классы символов генерируются symclass.php
|
||||||
|
@ -363,6 +364,45 @@ class Jevix{
|
||||||
$this->tagsRules[$tag][self::TR_TAG_CALLBACK_FULL] = $callback;
|
$this->tagsRules[$tag][self::TR_TAG_CALLBACK_FULL] = $callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* КОНФИГУРАЦИЯ: Устанавливаем комбинации значений параметров для тега
|
||||||
|
*
|
||||||
|
* @param string $tag тег
|
||||||
|
* @param string $param атрибут
|
||||||
|
* @param array $aCombinations Список комбинаций значений. Пример: array('myvalue'=>array('attr1'=>array('one','two'),'attr2'=>'other'))
|
||||||
|
* @param bool $bRemove Удаляеть тег или нет, если в списке нет значения основного атрибута
|
||||||
|
*/
|
||||||
|
function cfgSetTagParamCombination($tag, $param, $aCombinations,$bRemove=false){
|
||||||
|
if(!isset($this->tagsRules[$tag])) throw new Exception("Tag $tag is missing in allowed tags list");
|
||||||
|
|
||||||
|
if(!isset($this->tagsRules[$tag][self::TR_PARAM_COMBINATION])) {
|
||||||
|
$this->tagsRules[$tag][self::TR_PARAM_COMBINATION] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Переводим в нижний регистр значений параметров
|
||||||
|
* Ужасный код
|
||||||
|
*/
|
||||||
|
$aCombinationsResult=array();
|
||||||
|
foreach($aCombinations as $k=>$aAttr) {
|
||||||
|
$aAttrResult=array();
|
||||||
|
foreach($aAttr as $kk => $mValue) {
|
||||||
|
if (is_string($mValue)) {
|
||||||
|
$mValue=mb_strtolower($mValue);
|
||||||
|
} elseif (is_array($mValue)) {
|
||||||
|
foreach($mValue as $kkk=>$vvv) {
|
||||||
|
if (is_string($vvv)) {
|
||||||
|
$mValue[$kkk]=mb_strtolower($vvv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$aAttrResult[$kk]=$mValue;
|
||||||
|
}
|
||||||
|
$aCombinationsResult[mb_strtolower($k)]=$aAttrResult;
|
||||||
|
}
|
||||||
|
$this->tagsRules[$tag][self::TR_PARAM_COMBINATION][$param] = array('combination'=>$aCombinationsResult,'remove'=>$bRemove);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Автозамена
|
* Автозамена
|
||||||
*
|
*
|
||||||
|
@ -1051,6 +1091,51 @@ class Jevix{
|
||||||
if(!$short && $content == '') return '';
|
if(!$short && $content == '') return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на допустимые комбинации
|
||||||
|
if (isset($tagRules[self::TR_PARAM_COMBINATION])) {
|
||||||
|
$aRuleCombin=$tagRules[self::TR_PARAM_COMBINATION];
|
||||||
|
$resParamsList=$resParams;
|
||||||
|
foreach($resParamsList as $param => $value) {
|
||||||
|
$value=mb_strtolower($value);
|
||||||
|
if (isset($aRuleCombin[$param]['combination'][$value])) {
|
||||||
|
foreach($aRuleCombin[$param]['combination'][$value] as $sAttr=>$mValue) {
|
||||||
|
if (isset($resParams[$sAttr])) {
|
||||||
|
$bOK=false;
|
||||||
|
$sValueParam=mb_strtolower($resParams[$sAttr]);
|
||||||
|
|
||||||
|
if (is_string($mValue)) {
|
||||||
|
if ($mValue==$sValueParam) {
|
||||||
|
$bOK=true;
|
||||||
|
}
|
||||||
|
} elseif(is_array($mValue)) {
|
||||||
|
if (isset($mValue['#domain']) and is_array($mValue['#domain'])) {
|
||||||
|
if(!preg_match('/javascript:/ui', $sValueParam)) {
|
||||||
|
foreach ($mValue['#domain'] as $sDomain) {
|
||||||
|
$sDomain=preg_quote($sDomain);
|
||||||
|
if (preg_match("@^(http|https|ftp)://([\w\d]+\.)?{$sDomain}/@ui",$sValueParam)) {
|
||||||
|
$bOK=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif (in_array($sValueParam, $mValue)) {
|
||||||
|
$bOK=true;
|
||||||
|
}
|
||||||
|
} elseif($mValue===true) {
|
||||||
|
$bOK=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$bOK) {
|
||||||
|
unset($resParams[$sAttr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif(isset($aRuleCombin[$param]['remove']) and $aRuleCombin[$param]['remove']) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Если тег обрабатывает "полным" колбеком
|
// Если тег обрабатывает "полным" колбеком
|
||||||
if (isset($tagRules[self::TR_TAG_CALLBACK_FULL])) {
|
if (isset($tagRules[self::TR_TAG_CALLBACK_FULL])) {
|
||||||
$text = call_user_func($tagRules[self::TR_TAG_CALLBACK_FULL], $tag, $resParams, $content);
|
$text = call_user_func($tagRules[self::TR_TAG_CALLBACK_FULL], $tag, $resParams, $content);
|
||||||
|
|
BIN
engine/lib/external/swfupload/swfupload.swf
vendored
BIN
engine/lib/external/swfupload/swfupload.swf
vendored
Binary file not shown.
|
@ -76,11 +76,25 @@ class ModuleSession extends Module {
|
||||||
Config::Get('sys.session.host')
|
Config::Get('sys.session.host')
|
||||||
);
|
);
|
||||||
if(!session_id()) {
|
if(!session_id()) {
|
||||||
|
/**
|
||||||
|
* Попытка подменить идентификатор имени сессии через куку
|
||||||
|
*/
|
||||||
|
if (isset($_COOKIE[Config::Get ('sys.session.name')]) and !is_string($_COOKIE[Config::Get ('sys.session.name')])) {
|
||||||
|
unset($_COOKIE[Config::Get ('sys.session.name')]);
|
||||||
|
setcookie(Config::Get ('sys.session.name').'[]','',1,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Попытка подменить идентификатор имени сессии в реквесте
|
||||||
|
*/
|
||||||
|
$aRequest=array_merge($_GET,$_POST); // Исключаем попадаение $_COOKIE в реквест
|
||||||
|
if (@ini_get ('session.use_only_cookies') === "0" and isset($aRequest[Config::Get ('sys.session.name')]) and !is_string($aRequest[Config::Get ('sys.session.name')])) {
|
||||||
|
session_name($this->GenerateId());
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Даем возможность флешу задавать id сессии
|
* Даем возможность флешу задавать id сессии
|
||||||
*/
|
*/
|
||||||
$sUserAgent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
|
$sUserAgent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
|
||||||
if ($sUserAgent and (in_array($sUserAgent,$this->aFlashUserAgent) or strpos($sUserAgent,"Adobe Flash Player")===0) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {
|
if ($sUserAgent and (in_array($sUserAgent,$this->aFlashUserAgent) or strpos($sUserAgent,"Adobe Flash Player")===0) and is_string(getRequest('SSID')) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {
|
||||||
session_id(getRequest('SSID'));
|
session_id(getRequest('SSID'));
|
||||||
} else {
|
} else {
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
|
|
Loading…
Reference in a new issue