Ще се радвам на отзиви за най-добри практики относно модела за сигурност, който измислих за моето приложение. Гмуркам се с главата напред в надграждането на Microsoft Access Frontend/Backend до .NET WinForms/SQL Server с помощта на RDS на Amazon. Приложението ще бъде много потребителско, многосайтово (различни домейни) и ще съдържа чувствителна здравна информация.
Това е обобщението на 2 седмици изследване:
Криптиран низ за свързване, съхраняван в приложението, използвайки смесено удостоверяване и SSL. Не е идеално, но мисля, че измислих начин да се оправи, ако низът за връзка бъде откраднат (вижте #5 по-долу).
SQL Server приема връзки само от избрани IP адреси (всички ще бъдат статични).
Низ за свързване на приложение, присвоен на един потребител на SQL Server, който има привилегии само за изпълнение. Цялото взаимодействие с DB ще се извършва с помощта на процедури. Разрешения за схема, използвани за ограничаване на потребителя на приложението до определени процедури.
Потребителска таблица с SHA 256 осолени и хеширани пароли. Това осигурява първия слой на сигурност на приложението.
ТОВА Е ЧАСТТА, В КОЯТО НЕ СЪМ СИГУРЕН: Всяка процедура ще се изпълни напълно само ако оператор IF, търсещ потребителското име и паролата, изпратени като една от променливите exec = True. UN/PW ще се съхранява временно за всяка сесия на приложението. Моята обосновка е, че това не позволява на потребител с низа за връзка, който по някакъв начин влиза от разрешен IP адрес, да получи/промени каквито и да било данни без валидна парола.
Чувствителни колони, шифровани със симетричен ключ AES_256, шифровани от сертификат, използващ главен ключ на база данни. Потребителят на приложението има права да използва симетричен ключ и сертификат.
Потребителските пароли трябва да следват правилата (дължина, комбинация от главни/малки букви, специални знаци).
Може ли някой да види някакви дупки в това или има добри алтернативи? Решава ли #5 присъщите дупки в сигурността на низа за свързване, които имат приложенията на Windows, които не могат да използват Windows Authentication?