Подъем до прав администратора в приложении Mac

В большинстве экземпляров я сказал бы, если существует логика там, протестируйте ее. Это включает конструкторов и свойства, особенно когда больше чем одна вещь установлена в свойстве.

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

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

Так, Нет - я сказал бы, что нет такой вещи как "слишком много" тестирования в общем смысле, только для людей.

6
задан LukeWarm74 13 September 2009 в 02:51
поделиться

2 ответа

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

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

https://developer.apple.com/mac/library/documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/doc/uid/TP30000995-CH204-TP1

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

Вы захотите использовать функцию AuthorizationExecuteWithPrivileges, например:

- (IBAction)touch: (id) sender {

  NSString * filepath = [_filepathfield stringValue];
  FILE *commpipe = NULL;
  OSStatus execstatus;


  NSLog(@"file path is %@", filepath);

  char *args[] = {[filepath cString], NULL};


  SFAuthorization * authorization = [SFAuthorization authorization];

  execstatus = AuthorizationExecuteWithPrivileges([authorization authorizationRef],
                                                  "/usr/bin/touch",
                                                  kAuthorizationFlagDefaults,
                                                  args,
                                                  &commpipe);

  if (execstatus == errAuthorizationSuccess) 
    NSlog(@"Toot! It worked");
  else
    NSLog(@"No dice");

}

Учитывая, что BSD - тонкий и сварливый цветок, я бы рекомендовал не позволять пользователю выполнять произвольные команды из приложения, поскольку корень.

/ lecture

Код из вашего примера - это начало пути, если вы хотите ограничить функции своей собственной программы ее собственными пользователями. Например, у вас может быть приложение, которое позволяет только определенным пользователям изменять данные из сохраненного файла. Таким образом, вы должны создать запись в базе данных безопасности com.mycompany.LibraryApp.AlterData и проверить, есть ли у пользователя такая привилегия, когда он пытается изменить данные. Но это совсем другая тема ...

Надеюсь, это поможет, -p.

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