Как я могу предотвратить ужасное разрушение моего настольного приложения, когда пользователь портит его файлы во время выполнения? - PullRequest
1 голос
/ 29 октября 2008

Например, удаление выходного файла во время выполнения, направление двух экземпляров sw к одному и тому же вводу-выводу и т. Д.

Ответы [ 7 ]

7 голосов
/ 29 октября 2008

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

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

Никогда не предполагайте, что распределение ресурсов будет успешным, всегда проверяйте то, что вы не контролируете. Короче говоря, принимайте как можно меньше и проверяйте все .

'Мне сказали получить доступ к этому файлу для записи в него. Это уже открыто? У меня есть разрешения? Имеет ли он ожидаемый формат? На диске достаточно места? и др.

Есть еще много об этом. Просто Google для защитного программирования, и вам будет о чем почитать.

1 голос
/ 29 октября 2008

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

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

Будет ли программа использоваться людьми, которые ее не хотят, например, приложением времени, чтобы записывать, когда люди входят и выходят? Кто-то должен учитывать физическую безопасность (коммерческие версии рассчитаны на много злоупотреблений) и безопасность программного обеспечения (чтобы никто не мог изменить время). Вам нужно предоставить очень простой интерфейс и детально проверить входные данные.

1 голос
/ 29 октября 2008

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

Также подумайте об атаках SQL-инъекций с помощью поисковых терминов. например Ищите людей, чья фамилия ___, а пользователь вводит "* smith"; выберите * из пользователей * ". Что будет с этим делать слой базы данных?

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

Вы не говорите, на какую ОС и язык вы нацелены, но смотрите на то, чтобы предоставить приложению минимальные привилегии, необходимые для его выполнения. Например. в .Net посмотрите декларативные атрибуты безопасности. Это означает, что если злоумышленник получит контроль над вашим приложением, он сможет нанести ему меньше урона.

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

1 голос
/ 29 октября 2008

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

0 голосов
/ 29 октября 2008

Это сложный вопрос. Пользователи (даже глупые) могут с умом использовать ваше приложение так, как вы никогда не задумывались.

Я большой поклонник защитного программирования (как упомянуто выше Винко). Вы можете подойти к нему с точки зрения анализа опасности. Посмотрите на ресурсы, которые ваше приложение использует и модифицирует (файлы, устройства, данные и т. Д.), И подумайте, что может пойти не так с этими ресурсами, и спланируйте их.

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

Все это требует немного планирования и работы, но эй, за это нам и платят:)

0 голосов
/ 29 октября 2008

А как насчет хороших тестеров, симулирующих злоупотребления со стороны пользователей?

0 голосов
/ 29 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...