Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подземелье Магов
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  20:32[Войти] | [Зарегистрироваться]

Обсуждение материала
Пример использования Private Object Security в Delphi
Полный текст материала


Цитата или краткий комментарий:

«... При создании серверных приложений зачастую встает вопрос разграничения доступа различных групп пользователей к функциям этого приложения. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]5100%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 5

Оценка стиля изложения

  Все понятно, материал читается легко
[1]250%
 
  Есть неясности в изложении
[2]250%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 4




Смотрите также материалы по темам:
[Безопасность системы]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 8

17-04-2015 04:15
Хорошая статья. Читается как продолжение "Защиты объектов в NT" Ins'а (http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1322)
Ранее не приходилось сталкиваться с темой защиты. Но когда что-то понадобится, в Королевстве всегда найдется.

to voyager
Понятно, что приведенный Вами код небоевой, но создание объектов в обработчике нажатия кнопки (даже не в обработчике создания формы) без обязательного его уничтожения - сам по себе показателен.


29-04-2011 06:03
Прочитав статью решил попробовать сделать раздачу прав у себя в программе с помощью собственных средств безопасности Windows, но что-то не очень получается ((
  Написал небольшую программку в которой хочу просто создать дескриптор безопасности, почему-то функция CreateDefaultSD(pSD) всегда возвращает false. При этом, если в вызове функции CreatePrivateObjectSecurity(nil, @SD, pSD, false, H, RightMapping) @SD заменить на nil то вроде как отрабатывает, т.е. получается что в оригинальном варианте CreatePrivateObjectSecurity не может скопировать CreatorDescriptor в NewDescriptor. Не могу разобраться в чем проблема. Код программы следующий...

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, untSecUtils, untRightsMapping;
type
  TSec = class
  private
    pSD: PSecurityDescriptor;
    function CreateDefaultSD(out pSD: PSecurityDescriptor): boolean;
  public
    constructor Create();
end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TSec.Create;
begin
  if not CreateDefaultSD(pSD) then
    ShowMessage('ERROR!!!');
end;

function TSec.CreateDefaultSD(out pSD: PSecurityDescriptor): boolean;
var
  SD: TSecurityDescriptor;
  Acl: PACL;
  SzAcl: Cardinal;
  SidAdmins, SidSystem: PSID;
  H: THandle;
  LastErr: Cardinal;
//      ADMINS:      Sid: 'S-1-5-32-544'
//      LOCALSYSTEM: Sid: 'S-1-5-18'
begin
  Acl:= nil; SidAdmins:= nil; SidSystem:= nil; H:= 0;
  try
    Result:= AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
      SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
      0, 0, 0, 0, 0, 0, SidAdmins);
    if not Result then Exit;
    Result:= AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 1,
      SECURITY_LOCAL_SYSTEM_RID, 0, 0, 0, 0, 0, 0, 0, SidSystem);
    if not Result then Exit;
    SzAcl:= sizeof(Acl^) + GetLengthSid(SidAdmins)
      + GetLengthSid(SidSystem) + 2 * ACE_ALLOWED_SIZE;
    Acl:= Pointer(LocalAlloc(LMEM_FIXED, SzAcl));
    Result:= Acl <> nil;
    if not Result then Exit;
    Result:= InitializeAcl(Acl^, SzAcl, ACL_REVISION);
    if not Result then Exit;
    Result:= AddAccessAllowedAce(Acl^,
      ACL_REVISION, RightMapping.GenericAll, SidAdmins);
    if not Result then Exit;
    Result:= AddAccessAllowedAce(Acl^,
      ACL_REVISION, RightMapping.GenericAll, SidSystem);
    if not Result then Exit;
    Result:= InitDescriptor(SD, [isdDacl, isdOwner, isdGroup],
      Acl, nil, SidSystem, SidAdmins);
    if not Result then Exit;
    H:= GetCurrentToken(TOKEN_QUERY);
    Result:= H <> 0;
    if not Result then Exit;
    Result:= CreatePrivateObjectSecurity(nil, @SD, pSD, false, H, RightMapping);
  finally
    LastErr:= GetLastError;
    if H <> 0 then CloseHandle(H);
    if Acl <> nil then LocalFree(Cardinal(Acl));
    if SidAdmins <> nil then FreeSid(SidAdmins);
    if SidSystem <> nil then FreeSid(SidSystem);
    SetLastError(LastErr);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FSec: TSec;
begin
  FSec := TSec.Create;
end;

end.



11-04-2008 02:15
2 Dioran

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


09-04-2008 08:06
А что делать, если функция CreatePrivateObjectSecurity выдаёт ошибку INVALID OWNER и INVALID GROUP, хотя остальное всё проходит нормально?


30-03-2008 02:56
Прошу извинить за задержку, только сегодня увидел, что статья опубликована.

2 Мухтар

>>>1. Как эта модель работает, если клиент и сервер находятся в разных адресных пространствах? Интуитивно понимаю, что делается это через маршаллинг SUID, но в статье информация об этом умалчивается.

Просто мне казалось это очевидным, но, как видно, я ошибся:) Клиент отправляет серверу посредством некоего транспортного протокола запрос на выполнение неких действий. В прилагаемом к статье примере для этого использован именованный канал (NamedPipe). Сервер извлекает из полученного пакета информацию о том, какие именно действия хочет выполнить клиент, затем проверяет, имеет ли клиент права на выполнение данных действий, и либо выполняет их, либо отклоняет запрос, возвращая клиенту код ERROR_ACCESS_DENIED. Сам же клиент идентифицируется средствами ОС, так как именованные каналу позволяют серверу получать необходимую информацию о клиенте. Реализуется это вызовом ImpersonateNamedPipeClient с последующим получением текущего маркера потока. Однако ничто не мешает передать от клиента серверу имени и пароля клиента, тогда сервер сможет идентифицировать клиента вызовом LogonUser.

>>>2. Работает ли эта модель, если сервер и клиент находятся в одном адресном пространстве? Я так понимаю, что работает, если мы разрабатываем защиту от ошибок. Но защиту от умышленных действий, в одном адресном пространстве по-моему не сделаешь.

Рассмотренный механизм предназначен для использования в клиент-серверных приложениях, когда клиент не имеет физического доступа к защищаемому объекту, и все действия над ним может выполнять только через запросы серверу. Кроме того, в статье рассматривается реализация механизма разграничения доступа, когда разные клиенты имеют разные права на выполнение действий с защищаемым объектом. Защита же от разного рода атак к данной теме не относится и выходит за рамки данной статьи.

>>>3. Не представлено никакой информации о том, как контроллировать использование данных и методов, если писать программу не на WinAPI а с использованием библиотек и VCL

Это потому, что нет никакой разницы, вызывать AccessCheck перед вызовом API функции или методов дельфийского класса. В примере, кстати, в качестве защищаемого используется объект класса TStringList - вполне себе VCL-ный:))


28-03-2008 14:44
Пока автор не отозвался, предложу другой способ контроля умышленных ошибок в клиентских и серверных приложениях. Мысль пришла мне в голову после того, как я получил по почте спам на английском языке, с тяжелым для восприятия текстом.

Суть в том, чтобы использовать между недоверенным приложением (клиентом) и приложением, находящемся в нашем адресном пространстве (сервером), промежуточное звено в виде такого же сервера и типового клиента, реализующего эмулятор. Тогда ошибка сервера произойдет в эмуляторе, а а реальный сервер продолжит работу, с другими клиентами или после замены виртуального эмулятора.


28-03-2008 02:07
Век живи - век учись.
Правду говорят - чтобы задать вопрос нужно знать половину ответа. Теперь, спасибо автору, я знаю что есть возможность использовать штатные механизмы безопасности Win в своих приложениях. Раньше мне просто не приходило в голову что это возможно. Вот за эту информацию и спасибо.
А что касается кода реализации - ответ простой - "И да поможет Вам Google!" (и www.krugle.org)


27-03-2008 13:09
Есть неясности в изложении. Посему с Вашего позволения начнем обсуждение :-)

1. Как эта модель работает, если клиент и сервер находятся в разных адресных пространствах? Интуитивно понимаю, что делается это через маршаллинг SUID, но в статье информация об этом умалчивается.

2. Работает ли эта модель, если сервер и клиент находятся в одном адресном пространстве? Я так понимаю, что работает, если мы разрабатываем защиту от ошибок. Но защиту от умышленных действий, в одном адресном пространстве по-моему не сделаешь.

3. Не представлено никакой информации о том, как контроллировать использование данных и методов, если писать программу не на WinAPI а с использованием библиотек и VCL.

Хотелось бы услышать ответы на все 3 пункта.

Открыл для себя новое, но в статье не сказано о том, кому рекомендован путь использования механизма Private Object Security. А он чреват затруднениями и ошибками.


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Жили у бабуси два веселых гуся. Один белый, другой КАКОЙ?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования