15-ameliy_paradigma_qq
.pdf
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).
