Navigation Menu



image

PHP - somo la 47: Jifunze kuhusu sql injection na kuizuia

Katika somo hili utajwenda kujifunza jinsi ya kuzuia hacking kwenye website yako

Katika somo hili nitakwenda kukufundisha kuhusu php sql injection. Somo hili tutaangalia kwa ufupi kuhusu sql injection na jinsi ya kuweza kuizuia. Somo hili ni muenelezo wa masomo yetu kadhaa yaliyozungumzia usalama. Masomo mengine ni kama matumiazi ya htaccess, matumizi ya hashing, na encription pamoja na decription. Somo hili nitakuonyesha hatari ya sql injection.

 

Sql injection ni nini?

Hizi ni code shambulizi la kimtandao ambalo hufanyika kwa kuingiza sql statement kwenye ukurasa ambao mtumiaji huweka taarifa fulani. Kwa mfano ukurasa wa ku log in mtumiaji anatakiwa kuweka jina na password yake. Sasa hacker yeye ataweza code flani na kulog in bila ya kujisajili. Kwa mfano badala ya kuingiza jina na password mtumiaji anaweza kuingina '--'OR 1-1 hapo akafanikiwa ku log ina moja kwa moja.

 

Baadhi ya sql code zinazofanya injection

  1. OR 1=1

  2. –’ AND ..

  3. ‘) OR 1=1-]

  4. “OR “”=”

  5. “OR=”

  6. 1=1

  7. UNION SELECT

  8. DROP TABLE

 

Endapo mshambuliaji wa kimtandano (hacker) atafanikiwa kufanya injection anaweza kufanya mambo mengi hatari kama:-

  1. Kufuta table ama database yote

  2. Kufuta data

  3. Kulogin

  4. Kupata taarifa za watumiaji

  5. Kuedit data

 

Takwimu zinaeleza kuwa sql injection ni moja kati ya njia kuu 10 ambazo hutumiwa katika ku hack. Ni miaka 20 sasa imepita toka sql injection ijulikane lakini mpaka leo bado ma hacker wanagunduwa mbinu mpya za ku hack kw akutumia njia hii. Takwimu zinaonyesha kuwa asilimia 47 ya mashambulizi ya kimtandao ya ku hack husababishwa hutokana na sql injection.

 

AINA ZA SQL INJECTION

  1. In- band sql injection

Hii ni aina ya injection aambapo attack hufanyika kupitia error message ambayo hutokea kwenye web endapo kuna kitu hakipo sawa, ama kwa kutumia UNION oparator hivyo kuzuia aina hii ni vyema kila error za kwenye database yako usifanye za kawaida. Mfano iwe inaleta maneno ya kawaida kama “kuna hitilafu tafadhali jaribu tena” lakini kama error zinakuja zile za sql yenyewe  mfano hiyo hapo chini

 

  1. Out-band sql injection

Hii ni injection ambayo hufanyika kupitia HTTP, DNS au SMB. Kuzuia attack hii vyema kuwa makini wakati wa kusafirisha data kwenye hizi protocal. Kwa mfano kuwa makini wakati wa kusafirisha data kwenye parameter. Vyema kama hakuna ulazima kutumia POST method.

 

WAPI INJECTION HUTOKEA

Ujumla wa maneno ni kuwa statement yote ya sql ipo hatarini ila kuna maeneo ambayo yapo hatarini sana kuwa ndio chanzo cha attack nyingi zinazotokea. Kwa kiasi kikubwa attack hutokea kwenye WHERE na kwenye SELECT hata hivyo zinaweza pia kutokea kwenye

  1. UPDATE

  2. INSERT

  3. ORDER BY

 

NJIA ZA KUZUIA SQL INJECTIONS

Sio kitu rahisi kwa programmer kuwa mkamilifu kwa maana code zake zisiwe na makosa. Hvyo basi ni vyema kujuwa hizi njia zitakusaidia kuweka tahadhari. Njia hizo ni kama

  1. Parameterized queries

  2. Sanitizing 

  3. validating

Katika somo hili tutakwenda kuangalia njia hizi moja baada ya njingine kw avitendo. Kwa kuwa tumeshajifunza jinsi ya ku sanitize na ku validate haitakuwa vigumu kuzifanyia kazi kwenye somo hili. Hata hivyo hapa nitafundisha hasa kuhusu hii parameterized Querry kwa kuwa tulisha jifunz akuhusu sanitizing na validating kwenye masomo yaliopita.

 

MAREJEO

Kusoma zaidi kuhusu somo hili tembelea website hizi:-

https://www.acunetix.com/websitesecurity/sql-injection/

https://www.javatpoint.com/sql-injection

https://www.invicti.com/blog/web-security/sql-injection-cheat-sheet/

https://www.guru99.com/learn-sql-injection-with-practical-example.html

Exploiting SQL Injection: a Hands-on Example | Acunetix

Prevent SQL injection vulnerabilities in PHP applications and fix them (acunetix.com)

https://geekflare.com/open-source-web-security-scanner/

 

 

 

 

MAFUNZO KWA VITENDO:

Sasa ndio tunakwnda kufanyia kazi ambacho tumekisoma hapo juu. Wacha tuone hatari ya injection. Katika somo hili tutakwenda kutengeneza simple login system ambayo ni rahisi kufanya injection. Tutaona kwa ufupi jinsi injection zinavyofanya kazi kisha tutaangalia jinsiya kuiboresha system yetu ki usalama.

 

  1. Tengeneza database yenye jina sql. Kisha tengeneza table yenye jina users. Unaweza kutumia xode hizi

CREATE TABLE `users` (

  `id` int(11) NOT NULL,

  `username` varchar(50) NOT NULL,

  `email` varchar(50) NOT NULL,

  `password` varchar(255) NOT NULL,

  `status` int(1) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

Kumbuka kuweka id kuwa Auto Increment. Kisha ingiza data hizi

INSERT INTO `users` (`id`, `username`, `email`, `password`, `status`) VALUES

(5, 'chogozo', 'chogozo@gmail.com', 'chogozo@123', 1),

(6, 'kilimozo', 'kili@gmail.com', 'kili@321.com', 1),

(7, 'kilimozo', 'kili@gmail.com', 'e6e061838856bf47e1de730719fb2609', 1),

(8, 'mkwayu', 'admin@wikibongo.com', '0192023a7bbd73250516f069df18b500', 1);

 

Kwanza kabisa tengeneza folda liite web ndai ya folda hilo utatengeneza mafaili kadhaa kama nitakavyokutajia hapo chini.

 

  1. Tengeneza faili liite registration.php kisha weka htlm form kwa ajili ya kujisajili. Tumia code hizi

<html lang="en">

<head>

   <meta charset="utf-8">

   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

   <title>Registration form</title>

</head>

<body>

<form method="post" action="reg_script.php">

   <label for="name">User Name</label><br>

   <input type="text" id="name" placeholder="write your name" name="name"><br><br>

 

   <label for="email">Email</label><br>

   <input type="email" id="email" placeholder="write your email" name="email"><br><br>

 

   <label for="password">Password</label><br>

   <input type="password" id="password" placeholder="write your password" name="password"><br><br>

 

   <input type="submit" value="Register">

</form>

</body>

</html>

 

  1. Tengeneza faili lingine liite reg_script.php hili litafanyia kazi hiyo registration form. Weka code hizi:-

<?php

include 'config.php';

 

//prepare variable

$name = ($_POST['name']);

$email = ($_POST['email']);

$password = ($_POST['password']);

$hashed_password = md5($password);

 

//insert data in database

$sql = "INSERT INTO users (username, email, password, status)

VALUES ('$name', '$email', '$hashed_password', 1)";

/** @var TYPE_NAME $conn */

if (mysqli_query($conn, $sql)) {

   header("location: login.php");

} else {

   echo "Error: " . $sql . "

<br>" . mysqli_error($conn);

}

mysqli_close($conn);

 

?>

  1. Sasa tengeneza faili liite config.php hili ndilo la kuunganisha database. Weka code hizi

<?php

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "sql";

// Kufanya connection

$conn = new mysqli($servername, $username, $password, $dbname);

 

// Kuangalia connection

if (mysqli_connect_error()) {

   die("you are not connected: " . mysqli_connect_error());

}

?>

  1. Tengeneza faili lingine la login.php kisha weka code hizi

<html lang="en">

<head>

   <meta charset="utf-8">

   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

   <title>Login form</title>

</head>

<body>

<form method="post" action="login-script.php">

   <label for="name">User Name</label><br>

   <input type="text" id="name" placeholder="write your name" name="name"><br><br>

 

   <label for="password">Password</label><br>

   <input type="text" id="password" placeholder="write your password" name="password"><br><br>

 

   <input type="submit" value="Login">

</form>

</body>

</html>

  1. Sasa tengeneza faili lingine liite login-script.php hili ni kwa ajili ya kuchakata code za ku log in.

<?php

session_start();

include 'config.php';

 

//prepare variable

$name = ($_POST['name']);

$password = ($_POST['password']);

$hashed_password = md5($password);

 

/** @var TYPE_NAME $conn */

$sql = mysqli_query($conn, "SELECT * FROM `users` where username ='$name'");

while($fetch = mysqli_fetch_array($sql)){

   ?>

   <?php

//session start

   $_SESSION['username'] = $name;

// go to dashboard

   header("location: dashboard.php");

 

 

   ?>

<?php }

 

  1. Tengeneza faili liite session.php kisha weka code hizi

<?php

//Start the session

session_start();

 

Tengeneza faili liite logout.php kisha weka code hizi

<?php

//Start the session

session_start();

 

session_destroy();

header("location: login.php");

 

  1. Tengeneza faili liite dashboard.php kisha wweka code hizi

<?php

include 'config.php';

include 'session.php';

?>

<html lang="en">

<head>

   <meta charset="utf-8">

   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

   <title>Dashboard</title>

</head>

<body>

 

<?php

//kwa ajili ya kuangalia kama session imeanzishwa

if(!isset($_SESSION['username'])):

 

  ?>

 

<b><a class="btn btn-primary btn-lg" href="login.php">Login</a></b>

<?php else: ?>

   <?php

$p = $_SESSION['username'];

echo $p;

   ?>

<?php include 'menu.php';?>

   <style>

 

       table {

           width: auto;

           border-collapse: collapse;

           margin: 10px auto;

       }

       th,

       td {

           height: 50px;

           vertical-align: center;

           border: 1px solid black;

       }

 

 

   </style>

<table>

   <th>ID</th>

   <th>name</th>

   <th>Email</th>

   <th>View</th>

   <?php

   /** @var TYPE_NAME $conn */

   $file = mysqli_query($conn, "SELECT * FROM `users`");

   while($fetch = mysqli_fetch_array($file)){

       ?>

       <tr>

           <td><?php echo $fetch['id']; ?></td>

           <td><?php echo $fetch['username']; ?></td>

           <td><?php echo $fetch['email']; ?></td>

           <td><a href="view.php?id=<?php echo $fetch['id']; ?> "">...



Nicheki WhatsApp kwa maswali





           

Je! umeipenda hii post?
Ndio            Hapana            Save post

Rajabu Tarehe 2024-05-10 14:53:23 Topic: PHP Main: Masomo File: Download PDF     Share On Facebook or Whatsapp Imesomwa mara 342


Sponsored links
👉1 Kitabu cha Afya     👉2 Sira ya Mtume Muhammad (s.a.w)     👉3 Madrasa kiganjani     👉4 Simulizi za Hadithi Audio     👉5 kitabu cha Simulizi     👉6 Kitau cha Fiqh    

Post zifazofanana:-

PHP somo la 61: jinsi ya kufanya loop kwenye class kw akutumia foreach loop
Katika somo hili utakwenda kujifunza concept ya iteration kwenye PHP OOP hapa tutakwenda kuiona jinsi inavyofanya kazi pamoja na foreach loop Soma Zaidi...

PHP BLOG - somo la 11: Jinsi ya kutumia prepared statement
Katika somo hili utajifnza jinsi ya kufanya prepared statement kama njia ya kuzuia sql ingection kwenye PHP blog Soma Zaidi...

PHP - somo la 8: jinsi ya kuandika constant kwenye PHP
Katika somo hili utakwenda kujifunza jinsi ya kuandika constant kwenye PHP. Pia utajifunza utofauti wake na variable Soma Zaidi...

PHP somo la 54: PHP OOP class constant
Katika somo hili utakwenda kujifunza jinsi ya kutumia constatnt kwenye class. Soma Zaidi...

PHP somo la 89: Jinsi ya kutumia data za json kwenye program ya php na html
Katika somo hili utakwend akujifunza ni kwa namna gani utaweza kuzitumiadata za jsonkwenye program yako Soma Zaidi...

PHP somo la 84: Maana ya JSON na sheria za kuandika faili la json
Katika somo hili utakwenda kujifunza kuhusu Maana ya JSON na sheria za kuandika faili la json Soma Zaidi...

PHP - somo la 34: Jinsi ya kutumia do loop, while loop na foreach kwenye PHP
Katika somo hili utakwenda kujifunza kuhusu aina za loop DO, FOR, FOREACH LOOPS kwenye PHP Soma Zaidi...

PHP somo la 19: Jinsi ya kudhibiti mpangilio wa data baada ya kuzisoma
Katika somo hili utajifunza kupangilia data wakati wa kuzisoma kwenye database kw akutumia PHP Soma Zaidi...

PHP - somo la 16: Jinsi ya kufuta tabale na database kwa kutumia php
Katika somo hili utajifunza jinsi ya kufuta table ya databse kwa kutumia PHP. Pia utajifunza jinsi ya kututa database yeto Soma Zaidi...

Jinsi ya kutuma Email kwa kutumia PHP
Katika post hii utakwenda kujifunza jinsi ya kutuma email kwa kutumia php function ya email() Soma Zaidi...

PHP somo la 66: Jinsi ya ku edit data na kufuta kwenye database kwa kutumia PDO
Katika somo hili utakwenda kujifunza jinsi jinsi ya ku edit ama ku update data na kuzifuta kwenye database kwa kutumia PDO Soma Zaidi...

PHP - somo la 42: Jinsi ya kufanya encryption na de cryption kwa kutumia PHP
Katika somo hili utakwenda kujifunza jinsi ya kufanya encryption na decryption kwa kutumia PHP. hii itakusaidia kuongeza usalama kwenye taarifa za watu Soma Zaidi...