• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/vuln_scanner.php
  • Класс: CQAACheckListTests
  • Вызов: CQAACheckListTests::defineScanParams
private function defineScanParams()
{
	if(!defined('T_INCLUDE_RESULT_MODIFIER'))
		define('T_INCLUDE_RESULT_MODIFIER', 10001);
	if(!defined('T_INCLUDE_COMPONENTTEMPLATE'))
		define('T_INCLUDE_COMPONENTTEMPLATE', 10002);
	if(!defined('T_INCLUDE_COMPONENT'))
		define('T_INCLUDE_COMPONENT', 10003);
	if(!defined('T_INCLUDE_END'))
		define('T_INCLUDE_END', 10004);
	$SKIPDIR = array(// skipping directories
		'lang',
		'help',
		'images',
		'upload',
		'uploads',
		'jquery',
		'js',
		'css',
		'/bitrix/[^t].*',
	);

	$SKIPFILE = array(// skipping files
		'.access.php',
		'.description.php',
		'.parameters.php',
		'install/[w]*.php',
	);

	$arResult = Array(
		'FILE_TYPES' => Array(
			'.php',
			'.inc'
		),
		'PREG_FOR_SKIP_INCLUDE' => '//modules/(bitrix.)?[^W.]+//is',
		'PREG_FOR_SKIP_SCAN' => '/(/bitrix/modules/)|(/bitrix/components/bitrix/)|('.implode('$)|(', $SKIPDIR).'$)|('.implode('$)|(', $SKIPFILE).'$)/is',
		//	'VERBOSITY' => 1,
		'MAX_TRACE' => 30,
		'MAX_ARRAY_ELEMENTS' => 50,
		'MP_mode' => false,
		'production_mode' => false,
		'path' => $_SERVER['DOCUMENT_ROOT'],
		'doc_root_path' => $_SERVER['DOCUMENT_ROOT']
	);

	$arResult['TOKENS_TYPES'] = Array(
		'IGNORE' => Array(
			T_BAD_CHARACTER,
			T_DOC_COMMENT,
			T_COMMENT,
			T_INLINE_HTML,
			T_WHITESPACE,
			T_OPEN_TAG
		),
		'LOOP_CONTROL' => Array(
			T_WHILE,
			T_FOR,
			T_FOREACH
		),
		'FLOW_CONTROL' => Array(
			T_IF,
			T_SWITCH,
			T_CASE,
			T_ELSE,
			T_ELSEIF
		),
		'ASSIGNMENT' => Array(
			T_AND_EQUAL,
			T_CONCAT_EQUAL,
			T_DIV_EQUAL,
			T_MINUS_EQUAL,
			T_MOD_EQUAL,
			T_MUL_EQUAL,
			T_OR_EQUAL,
			T_PLUS_EQUAL,
			T_SL_EQUAL,
			T_SR_EQUAL,
			T_XOR_EQUAL
		),
		'ASSIGNMENT_SECURE' => Array(
			T_DIV_EQUAL,
			T_MINUS_EQUAL,
			T_MOD_EQUAL,
			T_MUL_EQUAL,
			T_OR_EQUAL,
			T_PLUS_EQUAL,
			T_SL_EQUAL,
			T_SR_EQUAL,
			T_XOR_EQUAL
		),
		'OPERATOR' => Array(
			T_IS_EQUAL,
			T_IS_GREATER_OR_EQUAL,
			T_IS_IDENTICAL,
			T_IS_NOT_EQUAL,
			T_IS_NOT_IDENTICAL,
			T_IS_SMALLER_OR_EQUAL
		),
		'FUNCTIONS' => Array(
			T_STRING, // all functions
			T_EVAL
		),
		'INCLUDES' => Array(
			T_INCLUDE,
			T_INCLUDE_ONCE,
			T_REQUIRE,
			T_REQUIRE_ONCE,
			T_INCLUDE_COMPONENT,
			T_INCLUDE_COMPONENTTEMPLATE,
			T_INCLUDE_RESULT_MODIFIER
		),
		'XSS' => Array(
			T_PRINT,
			T_ECHO,
			T_OPEN_TAG_WITH_ECHO,
			T_EXIT
		),
		'CASTS' => Array(
			T_BOOL_CAST,
			T_DOUBLE_CAST,
			T_INT_CAST,
			T_UNSET_CAST,
			T_UNSET
		),
		'LOGICAL' => Array(
			T_BOOLEAN_AND,
			T_BOOLEAN_OR,
			T_LOGICAL_AND,
			T_LOGICAL_OR,
			T_LOGICAL_XOR
		),
		'SPACE_WRAP' => Array(
			T_AS,
			T_BOOLEAN_AND,
			T_BOOLEAN_OR,
			T_LOGICAL_AND,
			T_LOGICAL_OR,
			T_LOGICAL_XOR,
			T_SL,
			T_SR,
			T_CASE,
			T_ELSE,
			T_GLOBAL,
			T_NEW
		),
		'ARITHMETIC' => Array(
			T_INC,
			T_DEC
		),
		'ARITHMETIC_STR' => Array(
			'+',
			'-',
			'*',
			'/',
			'%'
		),
		'SPACE_WRAP_STR' => Array(
			'.',
			'=',
			'>',
			'<',
			':',
			'?'
		)
	);
	$arResult['SECURING_FUNCTIONS'] = Array(
		'BOOL' => Array(
			'is_double',
			'is_float',
			'is_real',
			'is_long',
			'is_int',
			'is_integer',
			'ctype_alnum',
			'ctype_alpha',
			'ctype_cntrl',
			'ctype_digit',
			'ctype_xdigit',
			'ctype_upper',
			'ctype_lower',
			'ctype_space',
			'in_array',
			'preg_match',
			'preg_match_all',
			'fnmatch',
			'ereg',
			'eregi',
		),
		'STRING' => Array(
			'intval',
			'floatval',
			'doubleval',
			'filter_input',
			'urlencode',
			'rawurlencode',
			'round',
			'floor',
			'strlen',
			'hexdec',
			'strrpos',
			'strpos',
			'md5',
			'sha1',
			'crypt',
			'crc32',
			'base64_encode',
			'ord',
			'sizeof',
			'count',
			'bin2hex',
			'levenshtein',
			'abs',
			'bindec',
			'decbin',
			'hexdec',
			'rand',
			'max',
			'min',
			'preg_replace', //Fix this later
			'getimagesize',
			'phpformatdatetime',
			'mkdatetime',
			'formatdateex',
		),
		'INSTRING' => Array(
			'rawurldecode',
			'urldecode',
			'base64_decode',
			'html_entity_decode',
			'str_rot13',
			'chr',
			'htmlspecialcharsback',
		),
		'XSS' => Array(
			'htmlentities',
			'htmlspecialchars',
			'htmlspecialcharsex',
			'htmlspecialcharsbx',
			'jsescape',
			'jsurlescape',
			'phptojsobject',
			'showerror',
			'showmessage',
			'showimage',
			'shownote',
			'getcurpageparam',
			'selectbox',
			'selectboxm',
			'selectboxfromarray',
			'getmessage',
			'getvars',
			'highlight_string',
			'inputtype',
			'inputtags',
		),
		'SQL' => Array(
			'addslashes',
			'mysql_real_escape_string',
			'forsql',
		),
		'PREG' => Array(
			'preg_quote'
		),
		'FILE' => Array(
			'rel2abs'
		),
		'SYSTEM' => Array(
			'escapeshellarg',
			'escapeshellcmd',
		),
		'XPATH' => Array(
			'addslashes'
		)
	);

	$arResult['SECURING_FUNCTIONS']['QUOTE_ANALYSIS'] = Array($arResult['SECURING_FUNCTIONS']['SQL']);
	$arResult['SECURING_FUNCTIONS']['SECURES_ALL'] = array_merge(
		$arResult['SECURING_FUNCTIONS']['XSS'],
		$arResult['SECURING_FUNCTIONS']['SQL'],
		$arResult['SECURING_FUNCTIONS']['PREG'],
		$arResult['SECURING_FUNCTIONS']['FILE'],
		$arResult['SECURING_FUNCTIONS']['SYSTEM'],
		$arResult['SECURING_FUNCTIONS']['XPATH']
	);

	$arResult['VULN_FUNCTIONS'] = Array(
		'XSS' => Array(
			'echo' => array(0, $arResult['SECURING_FUNCTIONS']['XSS']),
			'print' => array(array(1), $arResult['SECURING_FUNCTIONS']['XSS']),
			'exit' => array(array(1), $arResult['SECURING_FUNCTIONS']['XSS']),
			'die' => array(array(1), $arResult['SECURING_FUNCTIONS']['XSS']),
		),
		'HTTP_HEADER' => Array(
			'header' => array(array(1), array())
		),
		'CODE' => Array(
			'assert' => Array(Array(1), Array()),
			'call_user_func' => Array(Array(1), Array()),
			'call_user_func_Array' => Array(Array(1), Array()),
			'create_function' => Array(Array(1, 2), Array()),
			'eval' => Array(Array(1), Array()),
			'mb_ereg_replace' => Array(Array(1, 2), $arResult['SECURING_FUNCTIONS']['PREG']),
			'mb_eregi_replace' => Array(Array(1, 2), $arResult['SECURING_FUNCTIONS']['PREG']),
			'ob_start' => Array(Array(1), Array()),
			//'preg_replace' => Array(Array(1, 2), $arResult['SECURING_FUNCTIONS']['PREG']),
			//'preg_replace_callback' => Array(Array(1, 2), $arResult['SECURING_FUNCTIONS']['PREG']),
		),
		'FILE_INCLUDE' => Array(
			'include' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['FILE']),
			'include_once' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['FILE']),
			'require' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['FILE']),
			'require_once' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['FILE']),
			'set_include_path' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['FILE']),
		),
		'EXEC' => Array(
			'backticks' => Array(Array(1), Array()),
			'exec' => Array(Array(1), Array()),
			'passthru' => Array(Array(1), Array()),
			'pcntl_exec' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['SYSTEM']),
			'popen' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['SYSTEM']),
			'proc_open' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['SYSTEM']),
			'shell_exec' => Array(Array(1), Array()),
			'system' => Array(Array(1), Array()),
			'mail' => Array(Array(5), Array()),
			'bxmail' => Array(Array(5), Array())
		),
		'DATABASE' => Array(
			'query' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['SQL']),
			'mysql_query' => Array(Array(1), $arResult['SECURING_FUNCTIONS']['SQL'])
		),
		'OTHER' => Array(
			'dl' => Array(Array(1), Array()),
			'ereg' => Array(Array(2), Array()),
			'eregi' => Array(Array(2), Array()),
			'sleep' => Array(Array(1), Array()),
			// It's too difficult to validate, maybe in future versions
			//'unserialize' => Array(Array(1), Array()),
			//'extract' => Array(Array(1), Array()),
			//'mb_parse_str' => Array(Array(1), Array()),
			//'parse_str' => Array(Array(1), Array()),
			//'define' => Array(Array(1), Array())
		),
		'POP' => Array(
			'unserialize' => Array(Array(1), Array()),
			'is_a' => Array(Array(1), Array())
		)
	);
	$arResult['USER_INPUTS'] = Array(
		'$_GET',
		'$_POST',
		'$_COOKIE',
		'$_REQUEST',
		//'$_FILES', // Maybe later
		//'$_SERVER', // Maybe later
		'$_ENV',
		'$HTTP_GET_VARS',
		'$HTTP_POST_VARS',
		'$HTTP_COOKIE_VARS',
		'$HTTP_REQUEST_VARS',
		'$HTTP_POST_FILES',
		'$HTTP_SERVER_VARS',
		'$HTTP_ENV_VARS',
		'$HTTP_RAW_POST_DATA',
		'$argc',
		'$argv'
	);

	$arResult['INIT_FUNCTIONS'] = Array(
		'initbvar',
		'initbvarfromarr'
	);

	$arResult['COLORS']=array(
		T_DOLLAR_OPEN_CURLY_BRACES => '#007700',
		T_CURLY_OPEN => '#007700',
		T_OPEN_TAG => '#007700',
		T_CLOSE_TAG => '#007700',
		T_AND_EQUAL => '#007700',
		T_CONCAT_EQUAL => '#007700',
		T_DIV_EQUAL => '#007700',
		T_MINUS_EQUAL => '#007700',
		T_MOD_EQUAL => '#007700',
		T_MUL_EQUAL => '#007700',
		T_OR_EQUAL => '#007700',
		T_PLUS_EQUAL => '#007700',
		T_SL_EQUAL => '#007700',
		T_SR_EQUAL => '#007700',
		T_XOR_EQUAL => '#007700',
		T_IS_EQUAL => '#007700',
		T_IS_GREATER_OR_EQUAL => '#007700',
		T_IS_IDENTICAL => '#007700',
		T_IS_NOT_EQUAL => '#007700',
		T_IS_NOT_IDENTICAL => '#007700',
		T_INC => '#007700',
		T_DEC => '#007700',
		T_OBJECT_OPERATOR => '#007700',
		T_IF => '#007700',
		T_SWITCH => '#007700',
		T_WHILE => '#007700',
		T_DO => '#007700',
		T_EXIT => '#007700',
		T_TRY => '#007700',
		T_CATCH => '#007700',
		T_ISSET => '#007700',
		T_FOR => '#007700',
		T_FOREACH => '#007700',
		T_RETURN => '#007700',
		T_DOUBLE_ARROW => '#007700',
		T_AS => '#007700',
		T_CASE => '#007700',
		T_DEFAULT => '#007700',
		T_BREAK => '#007700',
		T_CONTINUE => '#007700',
		T_GOTO => '#007700',
		T_GLOBAL => '#007700',
		T_LOGICAL_AND => '#007700',
		T_LOGICAL_OR => '#007700',
		T_EMPTY => '#007700',
		T_UNSET => '#007700',
		T_ELSE => '#007700',
		T_ELSEIF => '#007700',
		T_LIST => '#007700',
		T_ARRAY => '#007700',
		T_ECHO => '#007700',
		T_START_HEREDOC => '#007700',
		T_END_HEREDOC => '#007700',
		T_FUNCTION => '#007700',
		T_PUBLIC => '#007700',
		T_PRIVATE => '#007700',
		T_PROTECTED => '#007700',
		T_STATIC => '#007700',
		T_CLASS => '#007700',
		T_NEW => '#007700',
		T_PRINT => '#007700',
		T_INCLUDE => '#007700',
		T_INCLUDE_ONCE => '#007700',
		T_REQUIRE => '#007700',
		T_REQUIRE_ONCE => '#007700',
		T_USE => '#007700',
		T_VAR => '#007700',
		T_BOOL_CAST => '#007700',
		T_DOUBLE_CAST => '#007700',
		T_INT_CAST => '#007700',
		T_UNSET_CAST => '#007700',
		T_BOOLEAN_OR => '#007700',
		T_BOOLEAN_AND => '#007700',
		T_FILE => '#007700',
		T_LINE => '#007700',
		T_DIR => '#007700',
		T_FUNC_C => '#007700',
		T_CLASS_C => '#007700',
		T_METHOD_C => '#007700',
		T_NS_C => '#007700',
		T_CONST => '#0000BB',
		T_VARIABLE => '#0000BB',
		T_STRING_VARNAME => '#0000BB',
		T_STRING => '#0000BB',
		T_EVAL => '#0000BB',
		T_LNUMBER => '#0000BB',
		T_ENCAPSED_AND_WHITESPACE => '#DD0000;',
		T_CONSTANT_ENCAPSED_STRING => '#DD0000;',
		T_INLINE_HTML => '#000000;',
		T_COMMENT => '#FF8000;',
		T_DOC_COMMENT => '#FF8000;'
	);
	ini_set('auto_detect_line_endings', 1);
	ini_set('short_open_tag', 1);

	return $arResult;
}