C, PHP, VB, .NET

Дневникът на Филип Петров


Авторски архив

* Подслушването на трафик и сесиите

Публикувано на 15 ноември 2008 в раздел ОСУП.

Проблемът "човек в средата" се появява, когато някой подслушва трафика между вас и сървъра. На практика досега не съществува техника, чрез която да откривате по безупречен начин, че някой подслушва вашата връзка. Затова когато разработваме сигурен софтуер трябва по условие да приемем, че нашия трафик е подслушван. Тук не става дума за фиксиране, а по-скоро за открадване на сесии (session hijacking).

Засега най-ефективният начин за защита е използването на криптография. В света на Интернет приложенията вече най-широко се употребява протокола за комуникация HTTPS, чрез който се пренася HTTP трафик през SSL (Secure Socket Layer).

Всички разгледани дотук техники за защита на потребителска сесия са напълно безполезни, ако използваме некриптиран канал за комуникация. В най-лошият случай, когато не криптираме нищо, то атакуващият дори няма да има нужда да прониква в сесията - той ще може да подслуша канала и да добие нужната информация от самите вас. Може да се приеме, че във всички случаи, когато session id се предава некриптирано, е възможен session hijacking (открадване на сесия). Прочети още...

.

 


* Фиксиране на сесиите по характеристики на потребителя

Публикувано на 15 ноември 2008 в раздел ОСУП.

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

Прочети още...

.

 


* Таймер за активност на потребителска сесия

Публикувано на 15 ноември 2008 в раздел ОСУП.

Както вече споменахме в статията за фиксиране на потребителски сесии, е добре приложенията, които пишем, да имат собствен таймер за активност, който е независим от настройките на сървъра. За щастие това се оказва доста лесна задача, тъй като всички езици за програмиране ни дават възможност за достъп до системния часовник на сървъра. В PHP ще реализираме тази функционалност чрез функцията time(). Тя връща броя секунди изминали от началото на "UNIX епохата", т.е. от 1 януари 1970. Нека преправим вече разгредания пример така, че да прекратява сесията ако тя е била неактивна повече от пет минути: Прочети още...

.

 


* Създаване на стриктен режим на сесия

Публикувано на 14 ноември 2008 в раздел ОСУП.

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

PHP предава идентификатора на сесията чрез специална променлива PHPSESSID. При него е предоставена възможност за предаване на тази променлива през URL, например: http://worldbank.dom/login.php?PHPSESSID=1234

По този начин потребител може да бъде подведен да използва фиксирана сесия и друг да я използва в последствие от негово име.

Нека разгледаме следния примерен код. В него просто създаваме потребителска сесия, в която вкарваме като променлива брояч. Кода на fixation.php ще бъде следния: Прочети още...

.

 


* Виртуални функции

Публикувано на 14 ноември 2008 в раздел С/С++.

Виртуалната функция e член-функция, която се дефинира в базовия клас и се предефинира в производния клас. Както и при виртуалните класове ключовата дума е virtual. Когато виртуална функция се предефинира в производен клас, ключовата дума virtual не е необходима. Чрез виртуалните функции се постига също "полиморфизъм по време на изпълнение". За целта виртуалната функция трябва да бъде извикана посредством указател. Когато указател към базов клас сочи към обект от производен клас, съдържащ виртуална функция, и тази функция се извика посредством указател, С++ решава коя версия на функцията ще бъде извикана въз основа на типа на обекта, сочен от указателя. Именно това решение се взема по време на изпълнение. Прочети още...

.

 


* Виртуални класове

Публикувано на 14 ноември 2008 в раздел С/С++.

При директното наследяване на множество базови класове е възможно един производен клас да наследи многократно даден базов клас. Така обаче може да се получи дублиране на член променливи.

Нека например класа vehicle има два производни класа: motorvehicle (добавя допълнителна информация за типа двигател на превозното срество) и passengervehicle (добавя информация за максималния брой пътници в превозното средство). Ако създадем клас car, който наследява едновременно motorvehicle и passengervehicle, то ние ще получим дублиране на член-променливи, тъй като класа car ще наследи двукратно член-променливите декларирани в класа vehicle.

Многократното наследяване може да се избегне чрез наследяване на базовия клас като виртуален. Това предотвратява присъствието на 2(или повече) копия на базовия клас във всеки следващ индиректен производен клас. Декларацията в този случай ще има вида: Прочети още...

.

 


* Указател към функция

Публикувано на 14 ноември 2008 в раздел С/С++.

Указателите към функции водят до някои много интересни и ефективни програмни техники. Както подсказва името им - това са указатели, които сочат към адреса в паметта, където е записана дадена функция. Тук трябва да отбележим, че указателите към функции не са нововъведение от С++, а са известни още от много компилатори за С. Оказват се особено подходящи при извикване на "callbacks" и за създаване на събития (events). Callback наричаме функция, която програмистът не е извикал изрично в програмния код. За тяхното изпълнение се грижи друга функция, която е приела указател към нейния адрес. Прочети още...

.

 


* Наследяване

Публикувано на 14 ноември 2008 в раздел С/С++.

Когато един клас наследява друг се използва общата форма:

	class <производен-клас>:<тип-достъп> <име-базов-клас> {
		//...
	};

Типът достъп е една от трите ключови думи: public, private или protected. Разликата между тях е:
- Ако наследяването е тип public, то на производния клас се допуска достъп до членовете на неговия собствен клас, на неговия базов клас и на функции, външни за класовете.
- Ако наследяването е тип protected, то се допуска достъп до членовете на неговия собствен клас, на неговия базов клас, но не се допуска достъп на функции външни за класа.
- Ако наследяването е тип private, то производният клас няма достъп до private елементите на базовия клас и външни функции. Прочети още...

.

 


* Допълнителни задачи към упражнение 4

Публикувано на 14 ноември 2008 в раздел С/С++.

Задача: Дефинирайте клас point с елементи координатите на точка x и y.
- Дефинирайте член-функция show, която отпечатва координатите на точката.
- Дефинирайте член-функция dist, която приема два псевдонима към клас point и връща разстоянието между подадените две точки.
- Предефинирайте член-функцията dist, така че да и предаваме указатели към две точки.

Задача: Дефинирайте два класа - програмист и мениджър. Всеки от класовете да съдържа public елементи име, години и трудов стаж. Като private елементи двата класа да имат елементи заплата и масив от 12 елемента от тип int, в който да се записват броя работни часове за месеците през годината. Напишете:
- Конструктори и деструктори на класовете.
- Приятелска функция за двата класа, която показва кой повече е работил през годината и съответно кой взима по-голяма заплата.

.

 


* Фиксиране на потребителски сесии

Публикувано на 14 ноември 2008 в раздел ОСУП.

В тази статия се засяга проблема с фиксиране на потребителски сесии при интернет базирани приложения. Този материал е превод на статията на Mitja Kolsek от acrossecurity.com, която достатъчно подробно описва теорeтичната част на проблема. В последствие в допълнителни статии ще добавим и конкретни практически примери за защита срещу този род атаки.

Почти всички интернет приложения използват потребителски сесии, за да създават по-персонализирана среда на своя уеб сайт. Сесията на всеки отделен потребител се съхранява и управлява на сървъра чрез уникален идентификационен номер (session ID). Точно тези идентификатори са често основна цел на атакуващите, които чрез тях могат да "откраднат самоличността" на потребител. Повечето сървъри вече имат изградени защити или поне добри съвети за практики за предпазване на тези ключове, главно от три класа атаки: Прочети още...

.