Categories
PHP

Защита срещу SQL инжекции

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

Данни, подавани от потребителя винаги трябва да бъдат валидирани от приложението преди да бъдат използвани в SQL конструкции.

Първата стъпка при защита от SQL инжекции е валидацията на входните данни.

Валидацията представлява проверка дали входните данни, въвеждани от потребителя, отговарят на очакваните данни от приложението.

Пример за валидация е проверка дали потребителското име съдържа само символи от A до Z и цифри от 0 до 9, ако само тези символи са заложени като валидни в приложението при въвеждане на потребителско име.

За проверка може да се използва следният регулярен израз (шаблон) в комбинация с функцията preg_match() в PHP:

If (preg_match("/^[a-z0-9]+$/ui", $username)) {
echo 'потребителското име е валидно';
} else {
echo 'потребителското име не е валидно';
}

Ако функцията върне true, потребителското име е валидно.

Втората стъпка при защитата от SQL инжекции са така наречените готови конструкции (prepared statements). Използването им предотвратява на 100 процента възможността от атакуване с SQL инжекции. Това е така, защото заявките предварително се обработват от MySQL сървъра без да бъдат подавани потребителските данни и злонамереният потребител няма възможност да манипулира SQL конструкцията.

Categories
Visual C#

Constructor Chaining в C#

namespace OOP {
  class GSM {
    private string model;
    private string manufacturer;
    private decimal ? price;
    private string owner;
    private Battery battery;
    private Display display;

    public GSM(): this("Unknown Model", "Unknown Manifacturer") {}

    public GSM(string model, string manifacturer): this(model, manifacturer, null) {}

    public GSM(string model, string manifacturer, decimal ? price): this(model, manifacturer, price, null) {}

    public GSM(string model, string manifacturer, decimal ? price, string owner): this(model, manifacturer, price, owner, null) {}

    public GSM(string model, string manifacturer, decimal ? price, string owner, Battery battery): this(model, manifacturer, price, owner, battery, null) {}

    public GSM(string model, string manifacturer, decimal ? price, string owner, Battery battery, Display display) {
      this.model = model;
      this.manufacturer = manifacturer;
      this.price = price;
      this.owner = owner;
      this.battery = battery;
      this.display = display;
    }
  }
}
Categories
PHP

Разлика между Include и Require в PHP

Двете функции са идентични с една основна разлика – при възникване на грешка.

Require ще предизвика фатална грешка от тип E_COMPILE_ERROR и ще прекъсне изпълнението на скрипта.

Include ще предизвика грешка от тип E_WARNING, но изпълнението на скрипта ще продължи.

Categories
VB.NET Упътвания

Показване на точки в MapWinGIS

' дефиниране на нов точков shp файл
Dim pointShapeFile As New Shapefile
If pointShapeFile.CreateNewWithShapeID(String.Empty, ShpfileType.SHP_POINT) = True Then
    ' начален индекс на обектите в shp файла
    shapeIndex = 0
    ' за всеки връх (vertex) от списъка с върхове се създава нов точков обект в shp файла
    For Each vertex As Vertex In triangulation.VerticesList
        ' дефиниране на нов точков обект
        point = New Point
        ' координатите на точката съвпадат с координатите на върха
        With point
            .x = vertex.X
            .y = vertex.Y
        End With
        ' дефиниране на нов shp обект
        shape = New Shape
        With shape
            ' дефиниране на нов точков обект
            .Create(ShpfileType.SHP_POINT)
            ' вмъкване на точков обект
            .InsertPoint(point, 0)
        End With
        ' вмъкване на shp обекта в shp файла
        pointShapeFile.EditInsertShape(shape, shapeIndex)
        ' увеличаване на индекса с единица
        shapeIndex += 1
    Next vertex
    ' дефиниране на настройките за изобразяване на точковия shp файл
    With pointShapeFile.DefaultDrawingOptions
        ' тип на условния знак за точка
     .SetDefaultPointSymbol(tkDefaultPointSymbol.dpsCircle)
        ' запълващ цвят на условния знак
        .FillColor = color.ColorByName(tkMapColor.Blue)
        ' размер на точката
        .PointSize = 10
    End With
    ' добавяне и показване на точковия слой върху картата
    With Map
        .AddLayer(pointShapeFile, True)
        .ZoomToMaxExtents()
    End With
Else
    Throw New Exception("Не може да създаде нов shape файл с точки!")
End If
Categories
Visual C#

Задача: Bat Goiko Tower

Описание

Бат’ Гойко е известен български строител. Той прекарал по-голямата част от живота си в строене на магистрали. Той бил толкова добър в работата си, че по едно време не останало място за строене на нови магистрали. Бат’ Гойко бил много разочарован и решил да се премести във Франция, за да има повече пространство за неговите бъдещи проекти. Часове след като се приземил в Париж, брилянтна идея го озарила. Той решил да строи Айфелови кули, за да бъде по-ефективен откъм пространство. Качил се на първия самолет за България и започнал да строи кули в родината си.

Решение

Categories
Visual C#

Задача: Garden

Решение

Categories
Visual C#

Задача: Fire In The Matrix

Описание

Лятото наближава. Птичките пеят, дърветата са зелени, момичетата носят къси поли… Да, точно така, само в мечтите ти! Въпреки, че е юни, времето е ужасно. Нуждаем се от огън, за да се стоплим. Много огън! Много, много огън!!!

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

Решение

Categories
Visual C#

Задача: Drunken Numbers

Описание

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

Решение

Categories
Visual C#

Задача: Coffee Vending Machine

Описание

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

Решение

Categories
VB.NET

Задача: Sand-glass

Описание

Имало едно време един могъщ магьосник. Неговото име било Гуеногфрин. Не след дълго той станал велик магьосник. Добросърдечен бил той. Използвал магията си единствено, за да защитава хората от злите вещици, идващи през нощта. Гуеногфрин, въпреки това, бил миролюбив и не искал да се бие или нарани вещиците, затова той измислил друго решение. Щял да хваща вещиците и да ги заключва в пясъчни часовници (единственият затвор, от който  вещица не може да избяга). За нещастие, пясъчните му часовници били на привършване. Помогни на Гуеногфрин да залови всички вещици като направиш свои собствени пясъчни часовници.

Пример

Sand-glass

Решение