25 начина за заштита на вашата веб страница

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

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

Содржина внесена од корисник

1. Имајте на ум дека секоја содржина која е внесена од корисникот на вашата страница може да содржи било што. Ова значи дека се што се наоѓа во $_GET, $_POST, $_REQUEST и $_COOKIE може да содржи било каква вредност која може да и наштети на самата апликација.

2. Филтрирајте ја секоја содржина внесена од корисникот на вашата страница за да се осигурите дека ќе го добиете тоа што ви е потребно и дека не содржи непотребни работи кои би можеле да и наштетат на страницата.

3. Проверувајте ја должината на внесената содржина да не биде предолга.

4. Пред да ја испечатите содржината во Интернет прелистувачот, осигурете се дека правилно се отстранети работите кои би овозможиле напади како XSS и сл. За ваква заштита правете проверка користејќи листа на дозволени работи (white list) наместо листа на забранети работи (black list).

Користење и прикачување на фајлови

5. Правете проверка на прикачените фајлови за да бидете сигурни дека се тоа што очекувате.

6. Не правете само проверка на MIME типот на фајлот, бидејќи тој може да биде изменет во било што. Алогоритмот за проверка на фајлот може да биде лесно измамен со вметнување на потребните делови од фајлот за да го помине тестот. Пример: ги земате првите 20 бајти од PNG фајл и после него додавате ваш код, па така ќе добиете фајл кој ќе ги помине повеќето проверки.

7. Додатен метод за да се осигурите дека фајлот е во формат кој ви е потребен е да го снимите повторно. PNG слика може да биде снимена повторно како JPG користеќи GD библиотека.

8. Проверете дека фајлот не е преголем. Доколку користите MAX_FILE_SIZE мора пак да направите проверка на големината на фајлот преку PHP, затоа што вредноста во MAX_FILE_SIZE може да биде изменета.

9. Не вклучувајте прикачени фајлови со користење на include(). Ова може да активира PHP код кој се наоѓа во прикачениот фајл. Користете readfile().

10. Кога треба да прикачите фајл кој се наоѓа на друг сервер исто така не користете include(). Користете file_get_contents().

11. Не криете фајлови во фолдери кои се достапни преку Интернет прелистувач, бидејќи можат да бидат случајно или намерно погодени.

База на податоци

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

13. Не користете addslashes(), употребете ја функцијата наменета за тоа во зависност од типот на вашата база на податоци. Пример: mysql_real_escape_string().

14. Добар начин за заштита од “SQL injection” е користење на PDO.

15. Хеширајте ги лозинките пред да ги запишете во базата, за напаѓачот кој некако стигнал до базата, неможе да ги види во формата која биле внесени.

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

Користење на shared хостинг

17. Имајте во предвид дека на некои shared сервери корисниците на истиот сервет можат да имаат пристап до вашите фајлови. Потребно е да ги измените дозволите за пристап на фолдерите така што корисници од друга група да немаат пристап.

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

Дополнителна заштита

19. При најава на страницата користете CAPTCHA тест после неколку неуспешни обиди за најава, за да се оневозможат brute force нападите.

20. Не ги зачувувајте лозинките во cookie-ата на корисниците. Ова е лесен начин за употреба при користење на “запамти ме”, но е многу лоша идеја.

21. За енкриптирање на лозинките користете ја crypt() функцијата доколу сте во можност.

22. Не користете MD5.

23. Внимавајте на формуларите за враќање на лозинката. Не им дозволувајте на напаѓачите да дознаат дали внесената емаил адреса постои во базата или не.

24. Исклучете го прикажувањето на грешки кога страницата е on-line за да се оневозможи собирање на податоци во врска со вашата веб апликација.

25. Избегнувајте делови од страницата кои трошат многу серверски ресурси бидејќи можат да се искористат за DoS напади.

gravatar
Автор: Даниел Брзанов
За авторот: Здраво! Јас сум Даниел a.k.a. Delicon, се занимавам со веб дизајн и програмирање повеќе од 10 години и сакам да го споделам своето знаење со сите што се заинтересирани за тоа.

6 Коментари

  1. Зошто: 22. Не користете MD5. ?

  2. @Александар Тасевски

    MD5 не е доволно сигурен (веќе). На Интернет постојат огромен број на библиотеки кои служат за декриптирање на MD5. Може да се користи SHA1 или пак некој свој алгоритам.

  3. ако имаш направено вака заштитена страна стави линк 🙂

  4. […] компромитирање на вашата апликација од аспект на сигурност и […]

  5. Многу добар пост 🙂

  6. Некоја добра функција во PHP за проверка на бајти во фајлот, дали одговараат на MIME типот?

    Или тоа некако друкше се прави, на некој друг начин?

    На пример можам да направам PHP фајл и во него да ставам злонамерен код и после да го преименувам фајлот со jpg екстензија . 🙂