Кіріспе
Бағдарламалық жасақтаманы әзірлеу әдістемесі
Қорғаныс бағдарламалау – қауіпсіздіктің күмәнді аномалияларын анықтап, алдын ала белгіленген жауаптар беруге қабілетті бағдарламаларды жасауға бағытталған қорғаныс дизайнының бір түрі. Ол бағдарламалық жасақтаманың күтпеген жағдайларда үздіксіз жұмыс істеуін қамтамасыз етеді. Қорғаныс бағдарламалау тәсілдері жоғары сенімділік, қауіпсіздік немесе қорғалу қажет болған жағдайларда жиі қолданылады. Қорғаныс бағдарламалау – бағдарламалық қамтамасыз ету мен бастапқы кодты келесі тұрғылардан жақсартуға арналған тәсіл: Жалпы сапа – бағдарламалық жасақтамадағы қателер мен мәселелердің санын азайту. Бастапқы кодты түсінікті ету – код оқуға және түсінуге оңай болуы керек, сондықтан ол кодты тексеру кезінде мақұлданады. Бағдарламалық жасақтаманың күтпеген деректер немесе пайдаланушы әрекеттеріне қарамастан, болжамды түрде жұмыс істеуін қамтамасыз ету. Дегенмен, тым күшті қорғаныс бағдарламалау ешқашан туындамайтын қателерден қорғайды, соның салдарынан жұмыс істеу және техникалық қолдау шығындары артады.
General quality – reducing the number of software bugs and problems. Making the source code comprehensible – the source code should be readable and understandable so it is approved in a code audit. Making the software behave in a predictable manner despite unexpected inputs or user actions. Overly defensive programming, however, may safeguard against errors that will never be encountered, thus incurring run time and maintenance costs.
Шабуылдау бағдарламалары
Шабуылдау бағдарламалау – қорғаныс бағдарламалаудың бір түрі, онда кейбір қателерді қорғаныспен өңдеуге болмайтынына баса назар аударылады. Осы тәсілде бағдарламаның бақылауынан тыс қателер ғана (мысалы, пайдаланушы енгізген мәліметтер) өңделеді; бағдарламаның өзі және бағдарламаның қорғаныс шебіндегі деректер осы әдістемеде сенімді деп есептеледі.
Ақылды бастапқы кодты қайта пайдалану
Егер қолданыстағы код сынақтан өткенімен және жұмыс істейтіні белгілі болса, оны қайта пайдалану қателердің ену ықтималдығын азайтуы мүмкін. Дегенмен, кодты қайта пайдалану әрқашан дұрыс емес. Көп тараған кодты қайта пайдалану, әсіресе, бұрынғыдан гөрі көптеген адамдарға зиян келтіретін қауіпті бағдарламалар жасауға мүмкіндік береді және қайта пайдаланған кодтың барлық қауіпсіздік кемшіліктерін өздігінен әкеледі. Қолда бар бастапқы кодты пайдалануды жоспарлағанда, модульдерді (мысалы, класс немесе функциялар сияқты кіші бөлімдерді) жылдам қарап шығу, әзірлеушіге кез келген әлеуетті осалдықтарды анықтауға немесе олар туралы хабардар етуге, сондай-ақ оның жобаға сәйкес екенін қамтамасыз етуге көмектеседі.
Қасиетті деп тану
Зұлым пайдаланушылар қате деректерді ұсынудың жаңа түрлерін ойлап табуы мүмкін. Мысалы, егер бағдарлама "/etc/passwd" файлына қол жеткізуді қабылдамаса, хакер осы файл атауының басқа түрін, мысалы "/etc/./passwd" түрінде жіберуі мүмкін. Каноникалық емес кірістерден туындайтын қателерді болдырмау үшін каноникализация кітапханаларын қолдануға болады.
"Потенциалды" жәндіктерге төзімділігі төмен
Қателіктерге бейім (таныс осалдықтарға ұқсас) код құрылымдарын қателер және әлеуетті қауіпсіздік кемшіліктері деп қарастырыңыз. Басты қағида: "Мен қауіпсіздіктің барлық түрлерін білмеймін. Мен білетін нәрселерден қорғануым керек, содан кейін алдын алу шараларын қолдануым керек!".
Кодты қорғау үшін басқа да кеңестер
Ең көп кездесетін мәселелердің бірі – динамикалық өлшемдегі деректерді, мысалы бағдарламаға берілетін деректерді, тұрақты өлшемді немесе алдын ала бөлінген құрылымдармен бақылаусыз пайдалану (буфер асып кету мәселесі). Бұл әсіресе C тіліндегі жол (string) деректер үшін кең таралған. C кітапханасының gets сияқты функцияларын ешқашан қолданбау керек, себебі кіріс буферінің максималды мөлшері аргумент ретінде берілмейді. C кітапханасының scanf сияқты функцияларын қауіпсіз пайдалануға болады, бірақ бағдарламашы оларды пайдаланар алдында қауіпсіз пішімді тізбектерді таңдауға және оларды тазалауға көңіл бөлгені жөн. Желі арқылы жіберілетін барлық маңызды деректерді шифрлап/қамтамасыз ету керек. Өз шифрлау схемаңды жасауға тырыспа, орнына дәлелденгенін пайдалан. CRC немесе осыған ұқсас технологиямен хабарды тексеру желі арқылы жіберілетін деректерді қорғауға көмектеседі.