Поймите общие принципы безопасности (целостность, аутентификация, полномочия), а затем прочитайте несколько книг о том, как люди подрывали эти столпы безопасности на протяжении тысячелетий, и вы окажетесь примерно на полпути.
Затем прочитайте несколько хороших книг по стратегии проектирования и тестирования, и вы узнаете, как встроить тестируемость в вашу архитектуру.
Теперь мы подошли к тому моменту, когда я думаю о безопасности. Я думаю о том, как я могу проверить источник данных, имеет ли значение, если данные подделаны, кто является источником данных, насколько я в этом уверен? как это могло быть изменено и т.д ...
Это влияет на дизайн. Файлы конфигурации могут иметь зашифрованные разделы ключей или отдельные поля могут быть в виде открытого текста со связанным полем подписи. С услугами, связанными с Интернетом, все становится сложнее, так как следует ожидать большей враждебности.
Затем при тестировании, как вы все это тестируете. Каковы ваши максимальные записи данных, что произойдет, если вы выйдете за пределы этого программного обеспечения, как оно с этим справится? Чему это доверяет? как вы можете подделать это доверие?