Я устанавливаю путь динамически в соединитель.php, и он работает как следует во всех браузерах, кроме Internet Explorer. Вот мой код connector.php:
function access($attr, $path, $data, $volume) {
return strpos(basename($path), '.') === 0 // if file/folder begins with '.' (dot)
? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
: null; // else elFinder decide it itself
}// Documentation for connector options:
// https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options
$opts = array(
'debug' => true,
'roots' => array(
array(
'driver' => 'LocalFileSystem',
'path' => '../../pages/path/to/files/'.($_GET['mypath']).'/',
'URL' => '../../pages/path/to/files/'.($_GET['mypath']).'/',
'uploadDeny' => array('all'),
'uploadAllow' => array('image', 'text/plain'),
'uploadOrder' => array('deny', 'allow'),
'accessControl' => 'access'
)
)
);
// run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();
В основном происходит то, что если вы используете какой-либо браузер (кроме IE), ваш корневой каталог правильно установлен на $_GET['mypath']
, но если вы находитесь в IE, то корневой каталог установлен на /files/
(каталог только на один уровень выше необходимого), и в результате пользователь может видеть папки, к которым он не должен иметь доступ.
Есть идеи, почему это происходит?
Постскриптум Единственная теория, которая у меня есть, это то, что, возможно, IE JavaScript Engine отправляет некорректно mypath
переменная?
Код elFinder ниже:
<script type="text/javascript" charset="utf-8">
$().ready(function() {
var elf = $('#elfinder').elfinder({
// lang: 'ru',
url : 'libraries/elFinder/connector.php',
rememberLastDir : false,
useBrowserHistory : false,
customData : {mypath : <?php echo json_encode($_GET['CIF']); ?>}
}).elfinder('instance');
});
</script>
И фактический источник страницы выглядит так:
<script type="text/javascript" charset="utf-8">
$().ready(function() {
var elf = $('#elfinder').elfinder({
// lang: 'ru',
url : 'libraries/elFinder/connector.php',
rememberLastDir : false,
useBrowserHistory : false,
customData : {mypath : "mypath_folder"}
}).elfinder('instance');
});
</script>
P.S.S> Я только что подтвердил, что IE не отправляет mypath
переменная.
У кого-нибудь есть идеи?
ОБНОВЛЕНИЕ: 09/02/16
Сегодня после дальнейшего расследования я обнаружил очень странное поведение этого сценария:
Если это любой браузер (кроме IE), то $_GET['mypath']
работает как надо, но в IE $_GET['mypath']
не установлен, НО, если это IE то $_POST['mypath']
устанавливается вместо $_GET['mypath']
НО, во всех других браузерах $_POST['mypath']
не установлен.
Я хотел бы избежать проверки, если браузер семейства IE, то используйте $_POST
и если что-то другое, то $_GET
,
У кого-нибудь есть предложения?
ОТВЕТ:
$().ready(function() {
var elf = $('#elfinder').elfinder({
// lang: 'ru',
url : 'libraries/elFinder/connector.php',
requestType : 'post',
rememberLastDir : false,
useBrowserHistory : false,
customData : {mypath : <?php echo json_encode($_GET['CIF']); ?>}
}).elfinder('instance');
});
Если вы заставляете requestType
в post
тогда это всегда будет post
во всех браузерах, так что вам не нужно беспокоиться о проверке, если браузер публикует или получает.
$().ready(function() {
var elf = $('#elfinder').elfinder({
// lang: 'ru',
url : 'libraries/elFinder/connector.php',
requestType : 'post',
rememberLastDir : false,
useBrowserHistory : false,
customData : {mypath : <?php echo json_encode($_GET['CIF']); ?>}
}).elfinder('instance');
});
Если вы заставляете requestType
в post
тогда это всегда будет post
во всех браузерах, так что вам не нужно беспокоиться о проверке, если браузер публикует или получает.
Других решений пока нет …