0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 8
1

Разграничение доступа к файлам

16.04.2007, 11:44. Показов 2629. Ответов 11
Метки нет (Все метки)

Есть сайт на ASP (IIS 4.0). Необходимо разграничить доступ к большому числу файлов (архивов, html, картинок, ...). Узнать какие пользователи и куда имеют доступ можно из SQL базы, где также хранится набор паролей и логинов пользователей. Есть идея распихать все файлики по папкам с названиями, сгенерированными случайным образом, и ссылки давать только тем пользователям, которые к файликам имеют доступ.
Насколько это безопастно (т.е. можно ли получить каким-либо образом список папок)? Может есть другой способ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2007, 11:44
Ответы с готовыми решениями:

Получение доступа к файлам Excel из ASP
Плдскажите, кто знает как через ODBC получить доступ к данным в файлах *.xls Все время натыкаюсь на...

Своя Авторизация для доступа к .rar файлам.
Господа, как можно организовать собственную авторизацию (взамен авторизации NT), с тем, чтобы по...

Огр. доступа к файлам для неавториз. пользователей
Всем Привет! Ситуация следующая, есть список файлов для скачивания, доступ к нему должен быть...

Своя авторизация для доступа к .rar файлам
Господа, как можно организовать собственную авторизацию (взамен авторизации NT), с тем, чтобы по...

11
Sergik
16.04.2007, 12:46 2
вот пара ссылок, может быть там найдется компонент или приложение, позволяющее разграничить доступ (а вообще это лучше сделать через NT User Manager и настройки IIS)
http://www.aspin.com/home/webapps/fileoper
http://www.aspin.com/home/components/file
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 8
16.04.2007, 20:19  [ТС] 3
дело в том что юзеров очень много и разбить их на группы для разграничения доступа невозможно. поэтому использование NT User Manager и большинства сторонних компонентов затруднительно. Интересует все-таки насколько безопасен предложенный мной способ.
0
1 / 1 / 0
Регистрация: 16.04.2007
Сообщений: 86
16.04.2007, 23:39 4
на мой взгляд, лучше размещать файлы в недоступном по http месте, для авторизации использовать базу данных.
что-то подобное: http://www.asptoday.com/content/articles/20010205.asp
0
Sergik
17.04.2007, 11:11 5
Идея распихать файлики по папкам не кажется мне особо привлекательной, так как ничто не мешает одному пользователю дать свою ссылку другому пользователю, конечно все зависит от содержания сайта, бывают такие ситуации, когда пользователю просто не выгодно так делать (если уж на то пошло, то пользователи и своими паролями обменятся могут). То есть такой вопрос - какая разница, будет ли файл находиться в каталоге1 или в каталоге2 с точки зрения ссылки? - никакой, и зачем генерировать имя каталога случайным образом - лично мне все равно: /sdgfygfygfew/file.txt или /docs/file.txt. Ссылка-то по любому будет указывать на один и тот же файл. Просто надо выводить пользователю только те ссылки, к которым он имеет доступ.
Если 'засвечивать' имя файла не хочется, то можно сделать простой вывод содержимого файла без перехода браузером на него по такой структуре:
1) Пользователь загружает страницу с ссылками вида <a href='getdocs.asp?id=378'>документ 1</a>
2) При нажатии выполняется фал getdocs.asp, он делает следующее:
а) Проверяет, имеет ли доступ текуший пользователь к документу с указанным ID
б) Берет из БД имя файла, соответствующее указанному ID
в) Читает и выводит его содержимое на экран
3) Пользователь видит содержание документа, тогда как в строке URL он видит ничего не означающее getdocs.asp?id=378. И другой пользователь, которому не разрешено просматривать этот документ не пройдет проверки в файле getdocs.asp и содержимое файла не увидит.
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 8
17.04.2007, 12:50  [ТС] 6
>никакой, и зачем генерировать имя каталога >случайным образом - лично мне все >равно: /sdgfygfygfew/file.txt или /docs/file.txt

А разница в том, что зная, например, прямую ссылку на /sdgfygfygfew/file1.txt нельзя догадатся где лежит file2.txt без прямой ссылки
0
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 8
17.04.2007, 13:25  [ТС] 7
И еще. Как вывести через ASP страницу, например, zip файл, так чтобы поддерживалась его закачка каким-нибудь GetRight'ом (желательно с возможностью докачки) не показав при этом прямой ссылки на него?
0
Sergik
17.04.2007, 13:53 8
Если я увижу ссылку вида /sdgfygfygfew/file1.txt, то я ни за что не догадаюсь, что есть ссылка /sdgfygfygfew/файл_названия_которого_я_не_знаю.с_каким_то_расширением
Чтобы правильно отображались данные, следует указать нужный Content Type (например для .gif ContentType= image/gif), по-умолчанию он text/html
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 8
17.04.2007, 22:06  [ТС] 9
To Sergik:
>Если я увижу ссылку
>вида /sdgfygfygfew/file1.txt, то я ни за что не
>догадаюсь, что есть
>ссылка /sdgfygfygfew/файл_названия_которого_я_не_
>знаю.с_каким_то_расширением
Это то понятно. Получив название папки, пользователь получает доступ ко всем файлам в ней. Но вот догадатся какие еще папки существуют будет сложно, т.к. они имеют случайные названия

>Чтобы правильно отображались данные, следует
>указать нужный Content Type (например для .gif
>ContentType= image/gif), по-умолчанию он
>text/html
Это я знаю. Но указанную проблему с закачкой это, вряд ли, поможет решить.
0
Sergik
18.04.2007, 11:25 10
У меня была подобная проблема (не в разграничениях файлов, а в плане скачивания), все дело в том, что в ASP redirect (Response.redirect) мягко говоря не очень хорошо реализован. Я решил ее так:
код на Delphi:
файл Redirect.dpr
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library redirect;
 
uses
  WebBroker,
  ISAPIApp,
  go in 'go.pas' {WebModule1: TWebModule};
 
{$R *.RES}
 
exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;
 
begin
  Application.Initialize;
  Application.CreateForm(TWebModule1, WebModule1);
  Application.Run;
end.
Файл go.pas
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
unit go;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, HTTPApp;
 
type
  TWebModule1 = class(TWebModule)
    procedure WebModule1WebActionItem1Action(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  WebModule1: TWebModule1;
 
implementation
 
{$R *.DFM}
 
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  if Request.QueryFields.Values['id']<>'' then
  begin
    //Здесь идет обращение к БД и получается имя файла в file_name
    Response.SendRedirect(file_name);
  end;
end;
 
end.
Код написан следующим образом:
в Delphi
file-new-web server application
ISAPI/NSAPI
в webmodule1 создаем новый action и устанавливаем свойство default в true
затем в событии OnAction этого Action пишем
Delphi
1
2
3
4
5
  if Request.QueryFields.Values['id']<>'' then
  begin
    //Здесь идет обращение к БД и получается имя файла в file_name
    Response.SendRedirect(file_name);
  end;
компилируем, получаем файл .dll, размещаем его в каталог с правами execute и все работает, проверено лично ;-) хотя это и выходит за рамки ASP
0 / 0 / 0
Регистрация: 15.04.2007
Сообщений: 8
19.04.2007, 17:40  [ТС] 11
И еще вопрос.
Есть ASP, которая формирует HTML, вставляя туда файлы из закрытой для HTTP директории. Но вставляемый HTML код может содержать ссылки на картинки, которые должны уже лежать в открытой директории. Есть ли какой-нибудь способ эти картинки тоже спрятать от прямого просмотра?
Можно, конечно, сделать еще одну ASP, которая будет в качестве параметра получать имя файлика и его показывать (с помощью FileSystemObject), а ссылки на картинки заменить ссылками на эту ASP Но, боюсь, при большом количестве картинок это может сильно нагрузить сервер (или нет?).
Кстати, для Flash что нужно в ContentType прописать?
0
Sergik
19.04.2007, 18:23 12
была такая же проблема (с картинками) - я написал asp, только она не читала файл с диска, а делала на него Redirect (мне надо было статистику показов подсчитать), но в этом случае может не поможет, т.к. картинки находятся в недоступном для HTTP месте, хотя может и поможет, надо попробовать. Что-то типа :
Visual Basic
1
2
3
4
5
6
<%
if Request('id')<>'' then
'операции с БД по получению file_name
Response.redirect(Request('file_name'))
end if
%>
И ссылку на файл в <IMG>
Насчет Content Type -
regedit.exe-->HKEY_CLASSES_ROOT
там перечислены расширения файлов и указан (не для всех) Content Type.
У меня для файлов
.spl - application/futuresplash
.swf - application/x-shockwave-flash
Но не факт, что это поможет :-(
Мне кажется, что в IMG Flash не вставится, тут скорее всего <EMBED> надо использовать, а то и <OBJECT> (<OBJECT> не поддерживается NetScape)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2007, 18:23

Разграничение доступа пользователям
Добрый день! Может быть вопрос глупый, но тем не менее. Когда я создаю проект с опцией...

Разграничение прав доступа на GET запрос
Здравствуйте! Есть ли какая нибудь возможность разграничить права доступа пользователей по get...

Разграничение прав доступа к таблицам Access
подскажите, пожалуйста, как можно реализовать разграничение прав доступа. Таблицы Access. Например...

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

Разграничение доступа к элементам Windows Forms многопоточностью
Не могу разобраться с потоками на С#, читал статьи но так и не понял как сделать доступными...

Разграничение прав доступа для каждого пользователя
Здравствуйте, пишу на c#, знаний мало, поэтому возник вопрос по поводу пользователей, нужно сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.