ПредишенСледващото

Начинаещи грешки на PHP-разработчиците как да пишат сигурен код

За тези, които по някакъв начин се справиха проблеми със сигурността, се знае, че защитата на данните - това е един непрекъснат процес. Трябва да се предостави информация по отношение на:

  • достъпност;
  • цялост;
  • конфиденциалност.

Аз изкован в университета е глава над всичките пет години на обучение =)

Този процес може да осигури известна степен на защита, но това е невъзможно да се постигне 100% сигурност. Но нашата работа като програмисти - най-сигурната прилагането на различните видове заплахи.

Грешки в дизайна

Заплахи са напълно различни, и за съжаление, не всички от тях може да се прогнозира. Все пак, има често срещани грешки, които водят до появата на слаби места в приложения. В тази статия ще разгледаме най-популярните видове грешки, както и начини за справяне с тях. Така че ето го.

Работа с бази данни - SQL-инжекция

Защо това е първият параграф? Да, защото това е - най-важното нещо. съхранява в базата данни на всички данни за потребителите си, това е интересно да си конкуренти, както и други злодеи на първо място.

Нека разгледаме един пример за уязвим код.

И нашата молба към базата данни е на следния вид:

СЪЮЗ ви позволява да комбинирате няколко заявки в една. Параметърът минахме несъществуваща рекорден брой: 1 и първата част от искането, ние не се върне. След това през втората част на искането, се обърнахме към масата за потребителите и извади имейла полета и парола. помолени да ги наричат ​​в пробата като име и текст. Това искане е изпълнено и ние имаме в резултат на имейл потребител и парола на новини страницата на продукцията.

Solution - ЗНП

ЗНП ви позволява да се защитава срещу SQL-инжекция. което ви позволява да замени точните данни на правилните места. Това се дължи на подвързване на предаваните данни - ние искаме някои смяна в заявката, а след това peredaom желаната стойност за тях. Кодът ще бъде:

Ние наричаме заместване: идентификатор, след което изпълни метода даде стойност за него. Винаги използвайте ЗНП и препоръчителни стойности, тя няма да позволи prokinut нещо опасно в SQL-заявка.

PHP инжектиране

Тази техника, която позволява на атакуващия да изпълни произволен код на сайта. Един прост пример: Член сайт са файлове с текст. За откриването им употреби включва строителството. който получава самото настройки.

Дистанционно за инжектиране на файла

За да видите статията, се съхранява в основния файл. използва този URL адрес:

И кодът ще бъде изтеглен от сайта, така че да включва функция ви позволява да изпълнява код от отдалечени сървъри.

Нека също така и кодът, който се добавя към името на файла на каквито и да било възможности за разширяване.

В PHP файлове включват уязвимост ще бъдат направени:

Както можете да видите, тук разширяването се превръща в заявки опция и ще бъдат просто игнорирани.

Локално инжектиране на файла

Разбира се, това може да се използва код за достъп до чувствителни файлове на сървъра. Например, просто чрез определяне параметър път.

И файлът ще бъде показана в нападателя на браузъра.

Ако в началото на включвания файл има по определен начин, може да се използва само локално инжектиране.

По този начин може да се използва само относителната път.

Те могат и двете се вдигне и да се научат по пътя към текущия скрипт, когато възникне грешка (ако сървърът е настроен да показва грешката, че е голяма грешка). Така например, преминаване на оформление параметър не съществува някакво заклинание, нападателя ще получите съобщение за грешка, информацията ще бъде показан за файла, в който е възникнала грешката. Това е неговият начин. Използвайки го, вие вече може да се предположи, приблизителното местоположение на различни файлове.

Защита от PHP-инжекции

Можете да мислите за един куп различни филтрации. Но бих посъветвал да се придържаме към правилата - не позволяват на потребителя да въвежда данни в включват, изискват, Оценка.

Добив - употреба htmlentities () функция

Той преобразува герои като отваряне скоби в специални знаци, че браузърът показва същото като скобите и не ги възприемат като маркери.

Това означава, че в браузъра на посетителя ще видите текст:

Какво трябва да отделят повече внимание на безопасното развитие

В допълнение към най-типичните уязвимости все още има някои от най-добрите практики, които могат да направят своя код за по-сигурно. Нека да разгледаме тях.

Валидиране и данни sanitatsiya

Всички данни от потребителите, които се обработват от своя код, са потенциално опасни. В допълнение, ние често трябва да просто да се гарантира, че данните, дойде при нас и да се съхраняват в специален формат. По този начин можем да говорим за известна предвидимост на работата по тях. Това ще ни помогне да потвърдим и данни sanitatsiya.

Това, което ние сме в този план предлага PHP

На първо място - това леене. Всички идентификатора, която предава на потребителя трябва да доведе до цяло число (и не само това, всички ние трябва да доведе до желания тип).

Второ - регулярни изрази. В PHP, има много функции за работа с регулярни изрази. Те работят много бързо, защото библиотеката, за да работят с тях са написани на C и работа с редовен сезон се извършва на много ниско ниво.

На трето място, има вградена функция filter_var (). която позволява както да потвърди и да произвежда sanitatsiyu. Например, за да provalidirovat електронна поща, просто напишете:

Въпреки това, можете да видите стотици герои на редовния сезон, а често в кода. Не е така, всичко вече е направено за вас.

криптиране

На първо място, искам да кажа, че криптирането - това е много труден въпрос, и ние трябва да разберем, че най-вероятно сте го разбирам много повърхностно. Въпреки това, има специално обучени хора, които се занимават с тази тема, и те предлагат най-добрите практики, които трябва да се придържат към. В тази статия ще говорим за хеширане. Тази процедура предполага еднопосочно криптиране, след което получените стойности на оригинала не могат да бъдат възстановени.

Тази техника често се използва за съхраняване на пароли. Това се прави с цел да не се пазят оригиналните пароли. Тъй като много потребители използват една и съща парола за различни обекти, а ако базата данни е откраднат от един сайт и да видите паролите в ясен, то е вероятно, че една и съща потребителско име и парола за други подходящи сайтове. Така че, как се прилага. За проверка на паролата ние просто криптира администрация под формата на паролата за влизане на същия алгоритъм и сравни стойностите. Ако те съвпадат - паролата е правилна.

Дълго време тя е била използвана за алгоритъма MD5. За да създадете такъв хашиш в PHP има вградена функция md5 (). Ето един пример за използването му.

В резултат на това хеширане алгоритъм ще shestnadtsatibaytny код в шестнадесетичен вид. Както можете да си представите, броят на всички възможни хешове е ограничен. Поради това, в резултат на две различни хеш стойности могат да получат една и съща хеш. Това се нарича сблъсък. Това засяга всички разбъркващата функция. Уви, светът е несъвършен. Така че завръщането си алгоритъма MD5 - сега има така наречените таблици дъга за него (дъгата маси), които позволяват да се получи стойността (не е задължително оригинала), който, след като хеша ще съответства на стойността zaheshirovannogo оригиналната стойност. По този начин, знаейки, хашиш, можете бързо да получите паролата, която ще влезе в сайта.

След това добавете сол измислена. Или, както е посочено, "солени хешове." Долната линия е, че първоначалната парола, за да добавите някакъв текст. Резултатът е друга хеш.

Когато потребител въведе паролата, ние също така да добавите парола, за да го този низ heshiruem получената стойност и след това да се сравни получената стойност със стойността в базата данни.

Това осигурява защита от Rainbow таблици, тъй като вероятността за сблъсък е намалена поради факта, че солта трябва да съвпадат задължително хеш текст.

Бъдете за пикантни таблици дъга на ценности, не един, но дори и MD5 със сол до този момент доста бързо избран, особено ако някой е много необходимо.

По този начин, използването на MD5 - това е грешка. Тя е остаряла, опасен алгоритъм. Което, обаче, много от тях продължават да го използват.

Какво ще кажете за съхраняване на пароли?

Сега PHP има специални функции за хеширане, които използват усъвършенствани алгоритми за криптиране. Тя _passwordhash () и _passwordverify (). Първата функция създава хеш стойност за.

На второ място прехвърля на въведената парола и хашиш, получена първата функция. В резултат на това се връща невярна или истина. в зависимост от това дали правилната парола.

Тези характеристики вече са построени да работят със сол, и тя автоматично се добавя към хеша, когато тя е създадена, а същото се извлича от хеша като я сравнява с парола. Използвайте тези функции и ще бъдете щастливи.

заключение

В тази статия аз съм само повърхностно говорихме за най-популярните грешки на начинаещите предприемачи и даде пример за това как да се справят с тях. Сега аз ще ви посъветва да учат всеки един от тези въпроси по-подробно, за да се разбере какво е необходимо, за да се страхуват от на първо място. Google да ви помогне.

Какво друго са fakapy от гледна точка на сигурността?

Разбира се, всички те имат fakapy, ние всички сме хора. А напоследък съм бил - в конфигурационния файл на проекта лежи парола от поща за изпращане на писма от IMAP. Забравих да деактивирате тази конфигурационен файл в .gitignore. като резултат - кодът се оказа обществено достъпен в GitHub. За щастие, намерих човек, който ми писа за тази грешка. Парола аз веднага се промени, и човек благодари малък бонус материал. Разбира се, бях много щастлив. В крайна сметка, има достъп до електронна поща, можете да получите достъп до съобщенията, изпратени съобщения, както и сливане на потребителска база. Или още по-лошо, да ги изпращате на този пост нещо гадно.

Решението в този случай е от следните - пренебрегват всички конфигурации в .gitignore веднага, когато те се създават, и е по-добре да ги направят от хранилището.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!