Imported code from old repository
This commit is contained in:
1 parent
976fdc0199
commit
77cf9e05f1
91 files changed
+18969
-2
No files matched your search
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
namespace CloudObjects\PhpMAE\Sandbox;
|
||||
|
||||
use PHPSandbox\PHPSandbox, PHPSandbox\SandboxWhitelistVisitor,
|
||||
PHPSandbox\Error;
|
||||
use PhpParser\NodeTraverser, PhpParser\ParserFactory;
|
||||
use PhpParser\PrettyPrinter\Standard;
|
||||
use PhpParser\Error as ParserError;
|
||||
|
||||
class CustomizedSandbox extends PHPSandbox {
|
||||
|
||||
private static $globalSandbox;
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
|
||||
$this->set_options([
|
||||
'allow_classes' => true,
|
||||
'allow_interfaces' => true,
|
||||
'allow_aliases' => true,
|
||||
'allow_closures' => true,
|
||||
'allow_casting' => true,
|
||||
'allow_error_suppressing' => true,
|
||||
'validate_constants' => false
|
||||
]);
|
||||
$this->whitelist([
|
||||
'functions' => [
|
||||
'strlen','strcmp','strncmp','strcasecmp','strncasecmp','each','get_class','property_exists','is_a','trigger_error','user_error','gc_collect_cycles','gc_enabled','strtotime','date','idate','gmdate','mktime','gmmktime','checkdate','time','localtime','getdate','date_create','date_create_immutable','date_create_from_format','date_create_immutable_from_format','date_parse','date_parse_from_format','date_get_last_errors','date_format','date_modify','date_add','date_sub','date_timezone_get','date_timezone_set','date_offset_get','date_diff','date_time_set','date_date_set','date_isodate_set','date_timestamp_set','date_timestamp_get','timezone_open','timezone_name_get','timezone_name_from_abbr','timezone_offset_get','timezone_transitions_get','timezone_location_get','timezone_identifiers_list','timezone_abbreviations_list','date_interval_create_from_date_string','date_interval_format','date_sunrise','date_sunset','date_sun_info','ereg','ereg_replace','eregi','eregi_replace','split','spliti','sql_regcase','libxml_use_internal_errors','libxml_get_last_error','libxml_clear_errors','libxml_get_errors','openssl_spki_new','openssl_spki_verify','openssl_spki_export','openssl_spki_export_challenge','openssl_pkey_free','openssl_pkey_new','openssl_pkey_export','openssl_pkey_get_private','openssl_pkey_get_public','openssl_pkey_get_details','openssl_free_key','openssl_get_privatekey','openssl_get_publickey','openssl_x509_read','openssl_x509_free','openssl_x509_parse','openssl_x509_checkpurpose','openssl_x509_check_private_key','openssl_x509_export','openssl_x509_fingerprint','openssl_pkcs12_export','openssl_pkcs12_read','openssl_csr_new','openssl_csr_export','openssl_csr_sign','openssl_csr_get_subject','openssl_csr_get_public_key','openssl_digest','openssl_encrypt','openssl_decrypt','openssl_cipher_iv_length','openssl_sign','openssl_verify','openssl_seal','openssl_open','openssl_pbkdf2','openssl_private_encrypt','openssl_private_decrypt','openssl_public_encrypt','openssl_public_decrypt','openssl_get_md_methods','openssl_get_cipher_methods','openssl_dh_compute_key','openssl_random_pseudo_bytes','openssl_error_string','pack','preg_match','preg_match_all','preg_replace','preg_replace_callback','preg_filter','preg_split','preg_quote','preg_grep','preg_last_error','gzcompress','gzuncompress','gzdeflate','gzinflate','gzencode','gzdecode','zlib_encode','zlib_decode','zlib_get_coding_type','ob_gzhandler','bcadd','bcsub','bcmul','bcdiv','bcmod','bcpow','bcsqrt','bcscale','bccomp','bcpowmod','bzcompress','bzdecompress','jdtogregorian','gregoriantojd','jdtojulian','juliantojd','jdtojewish','jewishtojd','jdtofrench','frenchtojd','jddayofweek','jdmonthname','easter_date','easter_days','unixtojd','jdtounix','cal_to_jd','cal_from_jd','cal_days_in_month','cal_info','ctype_alnum','ctype_alpha','ctype_cntrl','ctype_digit','ctype_lower','ctype_graph','ctype_print','ctype_punct','ctype_space','ctype_upper','ctype_xdigit','dom_import_simplexml','filter_var','filter_var_array','filter_list','filter_id','hash','hash_hmac','hash_init','hash_update','hash_final','hash_copy','hash_hkdf','hash_algos','hash_pbkdf2','hash_equals','iconv','iconv_get_encoding','iconv_set_encoding','iconv_strlen','iconv_substr','iconv_strpos','iconv_strrpos','iconv_mime_encode','iconv_mime_decode','iconv_mime_decode_headers','json_encode','json_decode','json_last_error','json_last_error_msg','ldap_connect','ldap_close','ldap_bind','ldap_sasl_bind','ldap_unbind','ldap_read','ldap_list','ldap_search','ldap_free_result','ldap_count_entries','ldap_first_entry','ldap_next_entry','ldap_get_entries','ldap_first_attribute','ldap_next_attribute','ldap_get_attributes','ldap_get_values','ldap_get_values_len','ldap_get_dn','ldap_explode_dn','ldap_dn2ufn','ldap_add','ldap_delete','ldap_modify_batch','ldap_modify','ldap_mod_add','ldap_mod_replace','ldap_mod_del','ldap_errno','ldap_err2str','ldap_error','ldap_compare','ldap_rename','ldap_get_option','ldap_set_option','ldap_first_reference','ldap_next_reference','ldap_parse_reference','ldap_parse_result','ldap_start_tls','ldap_set_rebind_proc','ldap_escape','ldap_control_paged_result','ldap_control_paged_result_response','mb_convert_case','mb_strtoupper','mb_strtolower','mb_language','mb_internal_encoding','mb_detect_order','mb_substitute_character','mb_preferred_mime_name','mb_strlen','mb_strpos','mb_strrpos','mb_stripos','mb_strripos','mb_strstr','mb_strrchr','mb_stristr','mb_strrichr','mb_substr_count','mb_substr','mb_strcut','mb_strwidth','mb_strimwidth','mb_convert_encoding','mb_detect_encoding','mb_list_encodings','mb_encoding_aliases','mb_convert_kana','mb_encode_mimeheader','mb_decode_mimeheader','mb_convert_variables','mb_encode_numericentity','mb_decode_numericentity','mb_get_info','mb_check_encoding','mb_regex_encoding','mb_regex_set_options','mb_ereg','mb_eregi','mb_ereg_replace','mb_eregi_replace','mb_ereg_replace_callback','mb_split','mb_ereg_match','mb_ereg_search','mb_ereg_search_pos','mb_ereg_search_regs','mb_eLine truncated
|
||||
'random_bytes',
|
||||
'promise\unwrap',
|
||||
'guzzlehttp\psr7\parse_header'
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function validate($code) {
|
||||
$this->preparsed_code = $this->disassemble($code);
|
||||
$factory = new ParserFactory;
|
||||
$parser = $factory->create(ParserFactory::PREFER_PHP7);
|
||||
try {
|
||||
$this->parsed_ast = $parser->parse($this->preparsed_code);
|
||||
} catch (ParserError $error) {
|
||||
$this->validationError("Could not parse sandboxed code!", Error::PARSER_ERROR, null, $this->preparsed_code, $error);
|
||||
}
|
||||
$prettyPrinter = new Standard();
|
||||
if(($this->allow_functions && $this->auto_whitelist_functions) ||
|
||||
($this->allow_constants && $this->auto_whitelist_constants) ||
|
||||
($this->allow_classes && $this->auto_whitelist_classes) ||
|
||||
($this->allow_interfaces && $this->auto_whitelist_interfaces) ||
|
||||
($this->allow_traits && $this->auto_whitelist_traits) ||
|
||||
($this->allow_globals && $this->auto_whitelist_globals)){
|
||||
$traverser = new NodeTraverser;
|
||||
$whitelister = new SandboxWhitelistVisitor($this);
|
||||
$traverser->addVisitor($whitelister);
|
||||
$traverser->traverse($this->parsed_ast);
|
||||
}
|
||||
$traverser = new NodeTraverser;
|
||||
$validator = new CustomizedValidatorVisitor($this);
|
||||
$traverser->addVisitor($validator);
|
||||
$this->prepared_ast = $traverser->traverse($this->parsed_ast);
|
||||
$this->prepared_code = $prettyPrinter->prettyPrint($this->prepared_ast);
|
||||
return $this;
|
||||
}
|
||||
|
||||
public static function getGlobalSandbox() {
|
||||
if (!isset(static::$globalSandbox))
|
||||
static::$globalSandbox = new self;
|
||||
|
||||
return static::$globalSandbox;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user