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;
}