Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

15-ameliy_paradigma_qq

.pdf
Скачиваний:
0
Добавлен:
18.01.2026
Размер:
217.81 Кб
Скачать

15-ámeliy jumıs. Qáwipsizlik máselelerin ámeliy jaqtan kórip shıǵıw

Jumıstıń maqseti: Programmalastırıwdaǵı eń keń tarqalǵan qáwipsizlik mashqalaların (Vulnerabilities) ámeliyatta kórip shıǵıw hám olardıń aldın alıw usılların úyreniw. C++ hám Veb (simulyaciya) mısallarında "Buferdiń tolıp ketiwi" (Buffer Overflow), "SQL Inekciyası" hám "Sannıń tasıp ketiwi" (Integer Overflow) sıyaqlı qátelerdi analizlew. "Qáwipsiz kod jazıw" (Secure Coding) principlerin qáliplestiriw.

Teoriyalıq bólim: Qáwipsiz programmalastırıw – bul zıyanlı paydalanıwshılardıń (xakerlerdiń) sistemanı buzıwına jol qoymaytuǵın kod jazıw ámeliyatı.

Tiykarǵı qáwipsizlik qáteleri:

1.Buffer Overflow: Programma ajıratılǵan yadtıń shegarasınan shıǵıp, basqa maǵlıwmatlardıń ústine jazıp jiberiwi.

2.Integer Overflow: San tipleriniń (int) maksimal mánisinen asıp ketkende, sannıń teris mániske aylanıp ketiwi.

3.Input Validation: Kirgiziw maǵlıwmatlarınıń (Input) tekserilmewi.

4.SQL Injection: Maǵlıwmatlar bazasına jiberiletuǵın sorawǵa zıyanlı kod

qosıw.

ÁMELIY BÓLIM:

C++ tilinde qáwipli kodlardı hám olardıń dúzetilgen variantların kórip shıǵamız.

1-mısal: Integer Overflow (Sannıń tasıp ketiwi) Másele: Banktegi aqshanıń teris bolıp qalıwı. Kod (Qáwipli):

#include <iostream> using namespace std;

int main() {

// signed int (tańbalı pútin san)

//Maksimum: 2147483647 int balans = 2000000000; int depozit = 2000000000;

//Qosqanda 4 milliard boladı, biraq int sıydırmaydı

balans = balans + depozit;

// Nátiyje teris san bolıp shıǵadı! (-294967296)

cout << "Juwmaqlawshı balans: " << balans << endl;

if (balans < 0) {

cout << "QÁTE: Siz qarızǵa battıńız!" << endl;

}

return 0;

}

Kod (Qáwipsiz):

// Sheshim 1: Úlkenirek tip qollanıw (long long) long long balans = 2000000000;

long long depozit = 2000000000;

// Sheshim 2: Tekseriw (Validation) if (depozit > INT_MAX - balans) {

cout << "Operaciya biykar etildi: Summa júdá úlken." << endl;

} else {

balans += depozit;

}

2-mısal: Buffer Overflow (Buferdiń tolıp ketiwi) Másele: C tilindegi qatarlar menen nadurıs islesiw. Kod (Qáwipli):

#include <iostream> #include <cstring> using namespace std;

int main() {

char password[10]; // Tek 10 bayt orın bar

//Paydalanıwshı 20 belgi kirgizse ne boladı? cout << "Parol kirgiziń: ";

cin >> password; // 'cin' shegaranı tekseremeydi!

//Eger paydalanıwshı "SuperSecretPassword123" dep jazsa,

//password massivinen keyingi yadtıń ústine jazılıp ketedi.

//Bul programmanıń qulawına yamasa buzılıwına alıp keledi.

cout << "Kirgizildi: " << password << endl; return 0;

}

Kod (Qáwipsiz):

#include <iostream>

#include <string> // std::string - C++ qáwipsiz qatarı using namespace std;

int main() {

string password; // Dinamikalıq túrde yad aladı cout << "Parol kirgiziń: ";

cin >> password; // Qálegen uzınlıqtı qabıllaydı

cout << "Kirgizildi: " << password << endl;

//Yamasa char qollansaq, sheklew qoyıw kerek:

//char buf[10];

//cin >> setw(10) >> buf;

return 0;

}

3-mısal: SQL Injection (Simulyaciya)

Másele: Nadurıs kirgiziw arqalı logindi aylanıp ótiw. Kod (Qáwipli logika):

string user = "admin";

string pass = "12345"; // Bazadaǵı parol

string inputUser, inputPass;

cout << "User: "; cin >> inputUser;

cout << "Pass: "; cin >> inputPass;

//Eger SQL soraw mınaday dúzilse:

//"SELECT * FROM users WHERE user='" + inputUser + "' AND pass='" + inputPass + "'"

//Xaker inputPass ornına mınanı jazadı: "' OR '1'='1"

//Soraw mınaǵan aylanadı:

//"SELECT * FROM users WHERE user='admin' AND pass='' OR '1'='1'"

//'1'='1' hámme waqıt haqıyqat, sol sebepli parol tekserilmeydi!

Kod (Qáwipsiz):

// Parametrlengen sorawlardı qollanıw kerek (C++ te simulyaciya): if (inputUser == user && inputPass == pass) {

cout << "Kirisiw." << endl; } else {

cout << "Qáte parol." << endl;

}

// Kirgiziw maǵlıwmatındaǵı arnawlı belgilerdi (') tazalaw kerek.

4-mısal: Format String Vulnerability Másele: printf funkciyasın nadurıs qollanıw. Kod (Qáwipli):

char buffer[100]; cin >> buffer;

printf(buffer); // Eger buffer "%x %x" bolsa, yadtaǵı maǵlıwmatlardı shıǵarıp beredi!

Kod (Qáwipsiz):

printf("%s", buffer); // Format anıq kórsetiliwi kerek

ÁMELIY TAPSÍRMALAR

1-tapsırma: Parol quramalılıǵı. checkPassword(string pwd) funkciyasın jazıń. Ol paroldiń qáwipsizligin tekseriwi kerek:

1.Uzınlıǵı keminde 8 belgi.

2.Ishinde keminde bir san bolıwı kerek.

3.Ishinde keminde bir úlken hárip bolıwı kerek.

2-tapsırma: Qáwipsiz massiv (Index Out of Bounds).

10 elementli massiv jaratıń. Paydalanıwshıdan indeksti hám mánisti sorawshı programma jazıń.

Eger paydalanıwshı indeksti 10 yamasa -1 dep kirgizse, programmanıń qulap qalmawın támiyinleń (if menen tekseriń).

3-tapsırma: XSS (Cross Site Scripting) Tazalawshı. htmlSpecialChars(string input) funkciyasın jazıń.

Ol < hám > belgilerin sáykesinshe < hám > ge almastırıwı kerek.

Bul veb-betke zıyanlı skriptlerdiń kirip ketiwiniń aldın aladı.

4-tapsırma: File Path Traversal.

Paydalanıwshı fayl atın kirgizgende, eger atınıń ishinde "../" (artqa qaytıw) belgileri bolsa, "Qáwipsiz emes fayl atı!" dep shıǵarıwshı programma jazıń.

(Mısalı: "user.txt" - OK, "../windows/system32/config" - Qáwipli).

Соседние файлы в предмете Programmalastiriw paradigmalari