SQL Injection - Maelezo ya Zaidi
Aina za SQL Injection
Kuna aina mbalimbali za SQL injection:
Aina | Maelezo | Mfano |
---|---|---|
Classic SQLi | Kutumia alama za kutafsiri kuvunja msimbo | ' OR '1'='1 |
Blind SQLi | Kutambua makosa au mabadiliko katika majibu | admin' AND 1=CONVERT(int, (SELECT table_name FROM information_schema.tables))-- |
Time-based SQLi | Kutumia amri zinazosababisha mcheleweso | '; IF (1=1) WAITFOR DELAY '0:0:5'-- |
Union-based SQLi | Kutumia UNION kuongeza matokeo | ' UNION SELECT username, password FROM users-- |
Mifano zaidi ya Mashambulizi
1. Kufuta Data
Mshambuliazi anaweza kufuta data kwa:
'; DROP TABLE watumiaji;--
Hii itafuta meza nzima ya watumiaji!
2. Kuongeza Mtumiaji Mpya
Kuingiza mtumiaji mpya kwa ruhusa za msimamizi:
'; INSERT INTO watumiaji (jina, nenosiri) VALUES ('mshambuliazi', '123456');--
3. Kupata Data Nyeti
Kusoma data nyeti kama nenosiri:
' UNION SELECT 1, nenosiri, 1 FROM watumiaji WHERE jina = 'admin'--
Hatari za SQL Injection
- Upotevu wa data: Data inaweza kufutwa au kuharibiwa
- Uvujaji wa taarifa: Nenosiri na data nyeti zinaweza kuonekana
- Kudhibitiwa kwa mfumo: Mshambuliazi anaweza kudhibiti mfumo mzima
- Uvumbuzi wa mfumo: Mshambuliazi anaweza kugundua maelezo ya mfumo
Njia za Kuzuia kwa Undani
1. Prepared Statements kwa PHP
// Kwa PDO
$stmt = $pdo->prepare("SELECT * FROM watumiaji WHERE jina = :jina");
$stmt->bindParam(':jina', $jina);
$stmt->execute();
// Kwa MySQLi
$stmt = $conn->prepare("SELECT * FROM watumiaji WHERE jina = ?");
$stmt->bind_param("s", $jina);
$stmt->execute();
2. Thibitisha Maingizo
// Hakikisha jina la mtumiaji lina herufi pekee
if (!preg_match("/^[a-zA-Z0-9_]+$/", $jina)) {
die("Jina batili la mtumiaji");
}
3. Mapungufu ya Ruhusa
Hakikisha akaunti ya hifadhidata ina ruhusa ndogo zinazowezekana:
- Usiruhusu ruhusa za kufuta (DROP, DELETE)
- Ruhusu SELECT pekee kwa meza muhimu
- Tumia maoni tofauti kwa programu na msimamizi
0 Comments