2016-03-22 2 views
-1

Я работаю над веб-флэш-приложением для клиента, который загружает внешний файл из того же каталога, который находится на сервере. Я использую URLRequest для загрузки файла:Можно загрузить непубличный файл с того же веб-сервера?

loader.load(new URLRequest("Config.xml)); 

Щас файл Config.xml использует CHMOD 644, что дает ей публичный доступ для чтения. Однако клиент хотел бы защитить файл конфигурации, чтобы он не мог быть загружен третьими лицами.

Я думаю, что не удастся скрыть файл, удалив общедоступное разрешение на чтение (chmod 640), потому что тогда документ Flash, который выполняется на стороне клиента, не сможет его прочитать. Мои тесты, похоже, подтверждают это. Есть ли способ для приложения Flash в Интернете читать файл с сервера, не подвергая его публике?

ответ

1

Как уже говорилось, вы не можете этого сделать. Чтобы SWF мог загружать файл со стороны клиента, он должен быть общедоступным.

Возможным решением, которое может быть достаточно для вашего клиента, является встраивание содержимого XML-файла в ваш HTML на стороне сервера, например, как FlashVars или вывод JavaScript, тогда SWF не нужно загружать XML-файл напрямую и вам не нужно публиковать файл.

Например:

стороне сервера PHP:

<?php 
$xml = file_get_contents("Config.XML"); 
$encodedXml = rawurlencode($xml); 
?> 

<object type="application/x-shockwave-flash" data="my-flash.swf" width="550" height="400"> 
    <param name="movie" value="my-flash.swf" /> 
    <param name="FlashVars" value="config=<? echo $encodedXml ?>"/> 
</object> 

стороне клиента AS3:

var xml:XML = XML(stage.loaderInfo.parameters.config); 

Конечно кто-то может смотреть на ваш источник HTML и расшифровывает сам XML, но каким-либо образом вы получите XML-контент в SWF, вы увидите эту возможность , к разным уровням сложности. Вы могли бы сделать кодировку более запутанной (кодировка URL-адресов легко обнаружить) или зашифрована, чтобы затруднить ее поиск.

+0

Спасибо, я ценю, что вы предоставили обходные пути в дополнение к ответу на основной вопрос. – user45623

+0

@ user45623 Я не вижу никакого обходного пути здесь, Аарон только что изменил XML-контент с помощью HTML-кода, поэтому данные всегда общедоступны, это абсолютно не решение вашей проблемы ... – akmozo

+0

@akmozo Well , это буквально делает файл XML не общедоступным, но содержимое все еще загружается клиентом swf, и это то, что было задано. Как я уже сказал, XML-контент присутствует в HTML, но закодирован и может быть зашифрован и т. Д. Невозможно сделать контент на стороне клиента и недоступным, как мы все говорили, это всего лишь обходной путь, чтобы сделать файл XML недоступным как есть. – Aaron

0

Короткий ответ:

Нет, вы не можете сделать это.

Длинный ответ:

Нет, вы не можете сделать это, потому что, как вы уже знаете, Flash Player является технологией на стороне клиента, так что это точно так же, как и в браузере, и любой файл, загруженный вашим SWF, доступен и доступен для абсолютно любого лица, имеющего доступ к этому SWF-файлу, также забывает о разрешениях доступа к файлам, которые в этом не влияли.

Обратите внимание, что вы можете использовать некоторую систему шифрования для шифрования содержимого этого файла, и ваш SWF расшифрует его, но проблема здесь в том, что вы также должны зашифровать ваш SWF-файл, который, насколько мне известно, не является очень надежный метод, потому что SWF декомпиляции действительно очень эффективны в наши дни ...

...

Надежда, которая может помочь.

+0

«также забывают о разрешениях доступа к файлам, которые не имели никакого эффекта в этой ситуации». Ну, если вы удалите общедоступное разрешение на чтение из файла, SWF не сможет получить к нему доступ, поэтому он имеет эффект. – user45623

+0

@ user45623 Права доступа к файлам не имеют ничего общего со всем, потому что мы не можем загружать что-либо с помощью Flash Player, который не является общедоступным, так что это не имеет никакого эффекта, потому что если файл не является общедоступным, поэтому он не может использоваться в все в этой ситуации. – akmozo

1

No. Flash использует обычный HTTP-запрос для загрузки файла конфигурации, поэтому, конечно, он не может получить файл, если он недоступен для общественности.

Что вам нужно может do требует аутентификации для файла конфигурации и включает учетные данные в ваше объявление URLRequest. Тем не менее, это все еще страдает от слабости того, кто обнюхивает трафик, чтобы обнаружить аутентификацию, а затем снова запустить этот запрос с помощью другого инструмента.

В конечном счете, вы не можете иметь его в обоих направлениях: либо ваш конфиг доступен, либо небезопасен, либо он безопасен, но непригоден.

-1

Приложение на стороне клиента (Flash или другое) не может читать или загружать файлы с сервера даже с сервера, из которого он поступает. Когда он загружает общедоступный XML-файл, он делает запрос на него, и если файл имеет правильное разрешение и сервер знает, как обслуживать этот файл, запрос предоставляется и файл обслуживается. Это очень похоже на работу на стороне сервера, поэтому вы можете знать, что, когда вы говорите: «Flash работает на стороне клиента, так как я могу воспользоваться любым преимуществом серверного решения?» это явное непонимание того, как все работает на стороне клиента и на стороне сервера, потому что если вы загружаете xml-файл, тогда вы используете решение на стороне сервера. Теперь, когда это сказано, как это сделать, когда разрешено разрешение файла.

Обычно не разрешается доступ к файлам или каталогам на сервере, и в этом случае стороне клиента не может быть предоставлен прямой доступ к ним. Таким образом, это - то, когда вам нужно использовать технологию стороны стороны, чтобы обслуживать эти файлы. Поддерживайте боковые технологии, например, PHP может получить доступ ко всем файлам на сервере и сделать их копию или временно изменить их разрешение и т. Д.

Вы можете обслуживать на своих клиентах эти запрещенные файлы, просто написав сценарий стороны службы, который будет служить файлу для вас в зависимости от определенных вами критериев (или ни одного). Сторона сервера может изменить разрешение, позволяющее загрузить его, а затем изменить его или скопировать файл и поместить его в общедоступное место, а затем удалить. Вы также можете изменить расширение своего xml (например, на что угодно, например) и не предоставлять для него тип mimetype, даже если файл является общедоступным, сервер не сможет его обслуживать, вы можете заставить вас обслуживать изменение скрипта в стороне его расширение для вас на основе потребностей. Есть только сотни способов сделать это, включая веб-службы и даже AMF, и все это, пока необходимый файл не является общедоступным. Но да, вы должны написать сценарии на стороне сервера, которые являются ОЧЕНЬ ОБЩИМ способом для обслуживания файлов на стороне клиента.

+0

«это явное непонимание того, как все работает на стороне клиента и на стороне сервера, потому что если вы загружаете xml-файл, тогда вы используете серверное решение». Я понимаю, как клиент запрашивает файлы/данные с сервера, формулировка в вашем комментарии заставляла меня думать, что вы предлагаете, чтобы это можно было обрабатывать * полностью * на стороне сервера без взаимодействия на стороне клиента. Очевидно, что недостаточно места для объяснения вашей идеи в комментарии. – user45623

+0

Я понимаю, как использовать PHP-скрипты для извлечения файлов или данных. Все ваши предложения по-прежнему требуют, чтобы файл был общедоступным в той или иной форме, даже если он временный. Кто-то, кто вкладывает в него время, все еще сможет понять, как загрузить файл/данные, им просто нужно знать, как имитировать запрос из приложения. Flash, к сожалению, легко декомпилировать и реконструировать, поэтому риск того, что кто-то узнает метод запроса, реален. Честно говоря, я думаю, что изменение расширения файла или временного открытия, а затем повторное отображение его глупо. – user45623

+0

Вы управляете желаемым за действительное и предубеждением. Каждая отдельная онлайн-защищенная система работает на тех принципах, которые я раскрыл, процесс доступа к личным данным из db или частного файла использует тот же принцип, аутентификация. Вы называете это глупым и неуверенным, прекрасным, теперь расскажите всему миру, как это сделать правильно. Что касается Flash, который «легко декомпилирует и реконструирует», в отличие от чего? Единственная другая соответствующая веб-технология - это javascript, который вам не нужно декомпилировать, чтобы читать так, в чем смысл этого комментария? – BotMaster

Смежные вопросы