Защита медиа asp.net

Следующая процедура работает, если ваш файл уже добавлен как актив данных вашего проекта Watson Studio.

  1. Создайте токен проекта для вашего проекта. В своем проекте перейдите в Настройки kbd>, перейдите в раздел Токены доступа kbd> и щелкните параметр Новый токен kbd> (достаточно выбрать «Просмотрщик» «в раскрывающемся меню« Роль доступа для проекта »).

  2. Теперь в вашей записной книжке в режиме «редактирования» есть три точки ( ⋮ kbd>) в правом верхнем углу экрана, и вы нажимаете «вставить свой токен». Новая первая ячейка будет добавлена ​​с вашими учетными данными проекта, теперь вы запускаете ее.

  3. Теперь вы можете использовать такой код:

file = project.get_file("my_compressed_csv.zip")
df = pd.read_csv(file, compression='zip')

Параметр read_csv() не работает напрямую в этой ситуации в Watson Studio, поэтому вам нужно используйте библиотеку project-lib .

6
задан mson 21 January 2009 в 18:52
поделиться

5 ответов

Создайте HttpHandler, что ко всем носителям нужно получить доступ через. Затем до получения файла и отправки его вниз пользователю, можно выполнить любые проверки, которые Вы хотели бы. Сохраните все свои медиа за пределами основного пути wwwroot или запретите доступа к той папке с помощью полномочий.

Больше информации об этой теме здесь:

http://www.15seconds.com/Issue/020417.htm

11
ответ дан 8 December 2019 в 17:28
поделиться

Я использую XML-файл как это для установки, у каких пользователей/групп есть доступ к файлу

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
    <!ELEMENT file ANY>
    <!ATTLIST file name ID #REQUIRED>
]>
<root>
    <file name="file.doc" users="155,321" groups="grp5" />
    <file name="file2.doc" users="321" groups="" />
</root>

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

Когда пользователь пытается получить доступ к GetFile.aspx?file=file.doc, я загружаю XML, получаю строку с

XmlNode xnFile= XML.GetElementById(wantedFile);

, затем я вызываю функцию

 HasAccess(Context.User, xnFile); 

Который проверяет, зарегистрирован ли пользователь и сравнивает полномочия, и если для этого пользователя нормально иметь файл, я считал файлы из диска и выписываю им с

FileInfo thisFile = new FileInfo(secretLocation + wantedFile);
Response.Clear();
Response.Buffer = false;
Response.BufferOutput = false;
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Length", thisFile.Length.ToString());
Response.AddHeader("Content-disposition", "filename=" + thisFile.Name);
Response.ContentType = "application/none";
Response.WriteFile(secretLocation + wantedFile);
Response.Close();
Response.End();
Response.ClearContent();
Response.ClearHeaders();

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

2
ответ дан 8 December 2019 в 17:28
поделиться

Из Вашего комментария в ответе Spikolynn

Я озадачен - как это отличается, чем путаница? Аутентифицируемый пользователь смог бы добавить изображение (который они авторизовываются для) с другим аутентифицируемым, но неавторизованным пользователем?

Я предполагаю, что Вы пытаетесь предотвратить несанкционированное совместное использование медиа.

Это - что-то, что много компаний (Microsoft, Apple, IBM, и т.д.) поместило значительную сумму денег для решения. Решением было DRM, и теперь они удаляют его, потому что оно перестало работать.

Так, мой ответ - то, что Вы не можете предотвратить совместное использование, если пользователь готов приложить некоторые усилия для предотвращения его.

Можно просто сохранить честных людей честными путем применения некоторых методов как Spikolynn, или Lusid объясняют в их ответах.

1
ответ дан 8 December 2019 в 17:28
поделиться

Я предложил бы таблицу, содержащую файлы, к которым у каждого пользователя есть доступ:

UserID int
FileID varchar

затем таблица для Ваших файлов:

FileID    UniqueIdentifier
FileType  char(4)  <- so you know which extension to use.
etc...

На жестком диске назовите файл FileID (UniqueIdentifier) и FileType (расширение, например, .jpg). Идентификатор файла в таблице полномочий будет содержать UniqueIdentifier, сгенерированный в другой таблице.

Можно передать это через URL, знающий с относительной безопасностью, что пользователь не сможет предположить название любого другого файла.

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

0
ответ дан 8 December 2019 в 17:28
поделиться

brownpaperpackage.aspx? идентификатор = {гуид}

В событии Load media.aspx Вы проверяете, что пользователь аутентифицируется, затем проверьте, что пользователь имеет право просмотреть медиа, и если они делают, затем загружают медиа-контент как поток и подают его к Ответу страницы как продемонстрированный Spikolynn.

Почему делают это этот путь? Его простое для кодирования и Вы извлекаете всю пользу из ASP.NET и услуг аутентификации IIS, от которых можно найти пользователя, запрашивающего медиа. Его тривиальное для отображения того пользователя на список доступа для мультимедийных объектов. И Страница имеет объект запроса тут же. Вы также скрываете название медиа, таким образом, Вы не можете сказать то, что продолжается от URL.

Как Вы мешаете людям получать доступ к Вашим медиа непосредственно? Ваши медиа-файлы не могут быть сохранены в виртуальном каталоге IIS. Если они, существует возможность, что они могут быть загружены непосредственно. Можно сохранить их в базе данных как массив байтов (блоб) или сохранить их на диске за пределами веб-виртуального каталога. Пользователи должны пройти ASP.NET для доступа к файлам

Как Вы отслеживаете то, у каких пользователей есть доступ к какой медиа? Вы отслеживаете своих пользователей через членство asp.net. Это означает, что у каждого пользователя есть идентификатор в aspnet_users таблице. Составьте таблицу для своих медиа с идентификатором и именем файла (или блоб, содержащий фактические медиа). Затем просто необходимо составить третью таблицу, которая соединяет два. Эта таблица содержала бы идентификатор пользователя и идентификатор медиа, показывая, что этот пользователь может просмотреть это медиа. С идентификатором пользователя (от Членства asp.net) и идентификатор медиа (от URL) Вы просто должны

select count(*) from UserMedia where UserId = @UserGuid and MediaId = @MediaIdFromUrl

и если количество> 0 пользователь может просмотреть медиа.

Пример того, как Вы использовали бы URL:

<asp:image 
  runat="server" 
  ImageUrl="brownpaperpackage.aspx?id=53a2ea4(snip)76ca8b" />
0
ответ дан 8 December 2019 в 17:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: