**Безбедно кодирање** е начин на пишување на програма која ќе биде отпорна на напад од страна на злонамерни луѓе или програми.

Безбедното кодирање им помага на луѓето да ги заштитат нивните податоци од кражба или корупција.
Некоја несигурна програма може да озбезбеди пристап за напаѓачот, и да му овозможи да има контрола на опслужувачот или компјутерот на корисникот, која ќе резултира во оштетување на податоците на корисникот, губење на услугата, и други несакани дејства.
Безбедното кодирање е важно за сите софтвери,кога пишуваме код кој се извршува на Macintosh компјутер или iOS уреди,или од скрипти за наша сопствена потреба.
Треба да бидеме запознаени со овие информации.

Секоја програма е потенцијална цел.Напаѓачите ќе се обидат да најдат безбедни пропусти во нашите апликации или опслужувачи.
После тоа тие ќе ги искористат овие пропусти за да украдат тајни,корумпирани податоци или програми, и да се здобијат со контролата врз компјутерскиот систем или мрежа.
Тогаш нашите клиенти,и нашиот углед ќе бидат загрозени.
Безбедноста не е нешто што може да се додаде на софтверот како додатно.
Тоа е исто ако на некоја барака направена од картон, и ставиме катанец, тоа нема да биде воопшто безбеден начин.
Една несигурна алатка или апликација може да бара голем редизајн за да биде безбедна.
Ние мора да ја препознаеме природата на ризикот за софтверот, и да се обезбедиме со сигурносна алатка, за производот.
Безбедните програми се програми кои неможат да бидат манипулирани, со илегални операции.
Ако грешката во една програма предизвика програмата да прави некои непредвидени операции, но тие операции немаат значење во рамките на безбедноста, тогаш нема потреба програмата да се декларира за несигурна.

Дизајнот на апликацијата е повеќе слоен во својата природа.
Секоја апликација која има минимална комплексност, бара нејзиниот дизајн да е повеќе слоен.
Имплементацијата на протоколот, на пример бара,дизајн за самиот протокол,дизајн на нивоа на функции и интерфејси.
Кодирањето само по себе може да се смета како долен слој на дизајнот на апликацијата.
За да безбедноста биде исполнета се бара доволно внимание во секоја стаза на дизајнот.
Имплементацијата на безбедниот протокол, прво има потреба да биде дизајниран безбедно како протокол.
Регуларните програмерски багови може да се добијат од различни извори,и може да се предизвикани од големо множество на грешки.
Без безбедност во мислите,обемната проверка на влезот е една од областите која е често занемарена.
На, пример ако мала количина на податоци е очекувана како влез, но програмата прифаќа каква било количина,тоа предизвикува начин да кракерите,да вметнат извршен код во програмата.
Тие употребувајќи техники за кракирање,овој код го извршуваат ,и ја постигаат саканата цел.

Најчести практики за безбедно кодирање
--------------------------------------

* Валидирање го влезот.

Влезот треба да се валидира за сите несигурни извори.Правилниот начин на валидирање на влезот може да 
ги отстрани сите пропусти на софтверот.
Треба да се сомнева во повеќето надворешни податочни извори,вклучувајќи ги аргументите на командната линија,фајловите коишто се контролирани од корисниците.

* Обрнете внимание на предупредувањата од компајлерот

Компајлираниот код го употребува највисоко предупредувачкото ниво, кое е достапно за нашиот компајлер,и ги елиминира предупредувањата од модифицирањето на кодот.

* Архитектура и дизајн за безбедносните полиси

Создајте софтверска архитектура и дизајнирајте го вашиот софтвер за спроведување и извршување на безбедни полиси.

* Нека биде едноставно

Чувајте го дизајнот што е можно помал и поедноставен.
Комплексните дизајни ја зголемуваат веројатноста за грешка во имплементацијата,конфигурацијата и употребата.
Треба да се вложи напор за да се постигне високо ниво на безбедност.

* Стандардна забрана

Основи пристапни одлуки за дозвола наместо исклучување.
Ова значи дека пристапот е забранет,и заштитната шема идентификува услови под кои пристапот е дозволен.

* Придружување на принципот на најмалку привилегирани.

Секој процес треба да се извршува со најмало множество на привилегии потребни за да се заврши работата.
Секоја покачена дозвола треба да се задржи за минимално време.
Ова приближување ги намалува можностите на напаѓачот за да го изврши произволниот код со зголемени привилегии.

* Дезинфекција на податоци испратени до други системи

Дезинфекција на сите податоци кои поминале низ комплексен подсистем,како командна школка,релациони бази на податоци.
Напаѓачите може да бидат способни да повикаат неискористени функции во овие компоненти,преку употреба на SQL,команди,или други напади.
Ова не е потребен проблем затоа што комплексните подсистеми кои биле повикани,не разбираат со која цел е направен тој повик.

* Вежбање одбрана во далечина

Управување со ризикот преку повеќе одбранбени стратегии,така што ако еден слој на одбраната се претпоставува дека е несоодветен,тогаш друг слој може да делува превентивно.
На, пример комбинирање на безбедните програмерски техники до безбедно извршни околини,треба да ги редуцира можните пропусти.

* Користење на ефективни,квалитетни техники

Квалитетните техники можат да бидатефективни во идентификацијата и елиминацијата на пропустите.

* Усвојување на безбедно кодирачки стандарди

Развивање и применување на безбедно кодирачките стандарди,за наша цел во врска со јазикот на развивање и платформата.

Упатства за безбедно кодирање
-----------------------------

Пишување на безбеден код е суштински дел од безбедниот софтверски развој.
Генерално кажано, главната цел на развивачот е да напише код кој ќе работи.
За жал и искусните и неискусните програмери,мора да знаат да напишат безбеден код.
Ненамерното непознавање на пропустите на развивачите,може да генерира пропусти во програмот.
Таквиот пропуст може да биде одговорен за неуспех на програмата,или овозможување на напад на опслужувачот.
Примената на техниките за безбедно кодирање ни помага да се избегнат софтверските дефекти кои се одговорни за пропустите во софтверот.
Програмските јазици како C беа создадени за градење на ниско слојни и високо слојни апликации во 1970.Овие јазици се стремат кон високи перформанси и лесно користење.
Безбедноста не беше загриженост во тоа време.

Како и да е, зголемување на бројот на пропусти, и историјата на нападите,беа едни од негативностите во тоа време.
Така, главната цел на овој документ,е да обезбеди практично и делотворно множество на безбедносно кодирачки упаства.
Со цел да се развијат безбедни апликации,практиционирањето на безбедно кодирачките техники не е доволно само по себе.
Сиромашниот развој на праксата е одговорен за предизвикување дефекти и пропусти.
Повеќепати програмерите не успеале да ги детектираат овие пропусти за време на развојот.
Кога производот е пласиран во маркетот,тогаш пропустите се откриваат од страна на пребарувачите.
Пропустите кои се откриени и експлоатирани од страна на хакерите, може да останат незабележливи, сè додека се добие значителна сума на штета.
Еднаш пропустот е откриен,мора што побрзо да се интервенира.

Но,како и да е,безбедното кодирање многу ни помага,во заштитата од пропусти и грешки,како и од напади,од надворешни извори.
Би било многу ефикасно и добро,кога и искусните и тие што не се толку искусни,би пишувале безбеден код.
Безбедниот код е многу поактуелен во последно време,бидејќи луѓето кои се занимаваат со пишување на код се освестија на некој начин,дека безбедното кодирање е многу битно и корисно во секој случај.
И,затоа треба да се практикува постојано затоа,што со таквото кодирање бројот на пропусти и грешки ќе се намали.

Наводи
------

1. ↑  Вовед во безбедното кодирање *Introduction to Secure Coding Guide*
2. ↑  Важноста на безбедното кодирање *Importance of secure coding* (PDF)
3. ↑  10 безбедно кодирачки практики *Top 10 Secure Coding Practices*
4. ↑  Упатства за безбедно кодирање *Guidelines for Secure Coding* (PDF), Архивирано од изворникот (PDF) на 2012-05-03, Посетено на 2012-03-09