+9 ovoz
159 ko'rilgan 9 1
Sayt havfsizligini qanday taminlash mumkin va uning kodlarini qayerdan olsam bo'ladi
Bu mavzu Dasturlash bo'limida | 159 ko'rilgan
  

1 Javob

+1 ovoz
Eng zo'r javob
1
Odatda bu kodlarni hamma dasturchilar o'zi tuzadi.
Xavfsizlikni ta'minlash uchun:
1. XSS dan hushyor bo'lish
2. SQL injection tekshirish
3. Anti ddos ishlab chiqish.

1. XSS bu foydalanuvchiga chiqarilayotgan va undan kiritilayotgan ma'lumotlarni tekshirmaslik hisoblanadi.
Misol uchun sizda biron bir chat formasi qabul qiluvchi funktsiya bor:

//Post ma'lumotlarini olish
$name = $_POST['name'];
$message = $_POST['message'];
//Ma'lumotlarni bazaga kiritish
mysql_query("INSERT INTO `chat` SET `name` = '".$name."');

Siz bu holatda post ma'lumotlarini tekshirmayapsiz. Bu holatda user tomonida kiritilayotgan postga biron bir belgi yoki script qo'shib jo'natilsa siz bu ma'lumotlarni tekshirmaslikgingiz sababli ma'lumotlar  bazaga to'g'ridan to'g'ri kiritiladi.
Misol uchun:
<script>
location.assign('http://itex.uz');
</script>
Bu holatda bazaga kichik javascript sahifa yo'naltirish kodi kiritildi va ushbu malumotlar kerakli joyda foydalanuvchiga chiqarilganda kodlar ishlab ketadi va foydalanuvchu oynasi http://itex.uz sahifasiga yo'naltiriladi.

Buni oldini olish:
Raqamlarni filtrlash uchun:

function int($var) {
return abs(intval($var));
}

Matnlarni filtrlash uchun:

function txt($text) {
return htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}
2. Xuddi yuqoridagi holatga o'xshash faqat farqli tomoni unda belgilar yordamida baza ma'lumotlaridan keraklisini chiqarib olishham mumkin.

Misollarda ko'rsak:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h2>Ma'lumotlarni ko'rish uchun iltimos avtizatsiyadan o'ting:</h2>
<form method="get" action="?">
<p>Login</p>
<input name="name" type="text">
<p>Parol</p>
<input name="password" type="text"><br />
<input type="submit">
</form>
<?php
$mysqli = new mysqli("localhost", "root", "", "test_db");
if (mysqli_connect_errno()) {
printf("Ma'lumotlar bazasiga ulanib bo'lmadi: %s\n", mysqli_connect_error());
exit();
} else {
$mysqli->query("SET NAMES UTF8");
$mysqli->query("SET CHARACTER SET UTF8");
$mysqli->query("SET character_set_client = UTF8");
$mysqli->query("SET character_set_connection = UTF8");
$mysqli->query("SET character_set_results = UTF8");
}
$name = filter_input(INPUT_GET, 'name');
$password = filter_input(INPUT_GET, 'password');
if ($result = $mysqli->query("SELECT * FROM `members` WHERE name = '$name' AND
password = $password")) {
while ($obj = $result->fetch_object()) {
echo "<p><b>Ismingiz: </b> $obj->name</p>
<p><b>Sizning holatingiz:</b> $obj->status</p>
<p><b>Siz uchun mavjud bo'lgan ma'lumotlar:</b> $obj->books</p><hr />";
}
} else {
printf("Xatolik: %s\n", $mysqli->error);
}
$mysqli->close();
?>
</body>
</html>


Endi buni tekshirib ko'radigan bo'lsak:
http://localhost/index.php?name=Demo&password=123456

Bu holatda siz yuborgan name va password ma'lumotlar bo'yicha bazadagi ma'lumotlar bilan solishtiriladi.
Va bazadan true javobi kelsa sizga kerakli ma'lumotlar ko'rsatiladi.

SELECT * FROM `members` WHERE name = '$name' AND password ='$password'

SELECT bu yerda ma'lumotlarni olish uchun sql buyrug'i
* bu yerda tablitsadagi barcha qatorlarni olish haqidagi buyrug'
FROM bu yerda ma'lumotlarni qaysi tablitsadan olish haqidagi buyrug'
WHERE bu yerda tablitsaning qaysi qatoridan olish haqidagi buyrug'ni beradi. Agar siz kiritgan ma'lumotlar bazadagi ma'lumotlarga mos kelsa bazadan true (rost) javobi keladi agar mos kelmasa false (yolg'on) javobi keladi.

Endi formaga kiritilgan ma'lumotni o'rgartirib ko'ramiz:
Logindan so'ng ' belgisini qo'yamiz
http://localhost/index.php?name=Demo'&password=123456
va natijani ko'ramiz

Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near '111'' at line 1

Agar biz to'g'ri ma'lumotlarni kiritgan holda
buyruq bunday beriladi
SELECT * FROM `members` WHERE name = 'Demo' AND password ='111'
agar bir ' belgisini qo'shsak buyruq o'zgaradi
SELECT * FROM `members` WHERE name = 'Demo' ' AND password ='111'

Buyruqni yana o'zgartirib ko'ramiz
http://localhost/index.php?name=Demo' OR 1 --+ &password=123456

Endi buyruq quyidagicha o'zgaradi

SELECT * FROM `members` WHERE name = 'Demo' OR 1

Agar dasturlash tilidan bilsangiz shart operatorlarida AND yoki OR ishlatiladi bular AND va degani OR yoki degani.

Misol uchun:
$a = 1;
$b = 2;
if($a==1 AND $b==2){
echo'True';
}else{
echo'False';
}
Bu holatda bizga faqat a=1 va b=2 bo'lgandagina true javobini beradi
Agar biz AND o'rniga OR ishlatsak
a yoki b ikkalasidan qay biri berilgan songa teng bo'lsa True javobi chiqaveradi.


3. Anti ddos
DDOS hujum bu biron bir saytga bir vaqtning o'zida keragidan foydalanuvchi ulanishiga aytiladi.
Ya'ni sizning severingizga bir vaqtda judaham ko'p foydalanuvchi ulangani sabab server barcha foydalanuvchilargaham javob berishga ulgurmaydi va serverda susasiy yuzaga keladi bazan kuchlik hujumlardan so'yg server 1 soat yoki 1 sutkagacha ishlamay qolib ketishi mumkin.
Misol uchun tez orada 20 avgust kunida bu holat http://dtm.uz saytida kuzatiladi.

belgilash
0
bitta darslik bo'libdiku. Buni "Sayt Xavfsizligini taminlash" deb maslahatlar blogiga tashlasangiz bo'larkan
+1
Bu shunchaki qisqartirma variant xolos. Yaqinda saytimga shunga o'xshash maqola yozaman shunda bu saytgaham qo'shib qo'yaman
+1
ma'lumotlarni "htmlspecialchars" orqali bazaga yuborish ya'ni

$aaa=htmlspecialchars($_POST["text"]);

va COOKIE bilan ishlamasdan SESSIA bilan ishlash :)

O'xshash savollar

+11 ovoz
2 javob
Jahongir Temirov Bu mavzu Internet bo'limida 26 Apr, 17 savol berdi | 1.1k ko'rilgan
+9 ovoz
1 javob
+1 ovoz
3 javob
Arslanalayew Bu mavzu Saytlar bo'limida 29 Okt, 19 savol berdi | 242 ko'rilgan
+8 ovoz
2 javob
saylaw94 Bu mavzu Dasturlash bo'limida 16 Iyun, 18 savol berdi | 320 ko'rilgan
+26 ovoz
10 javob