Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Защита на MySQL заявка с функцията sprintf()
  1. Защита на MySQL заявка с функцията sprintf()
Mutatos
     
Автор  Mutatos (23.09.2007 14:48)  съобщение до автора
Погледнат  6971 пъти  добави към любими
Оценка  добави коментар
Гласове  --  изпрати на приятел
Коментари  (0)  абонирай се за PHP
    Страница 1 / 1

 



Има много различни подхода за защита на заявката към базата за данни, които са рзпространени сред разработчиците. Един от тях е чрез използването на sprintf(). Функцията sprintf() се използва за форматиране на низове. Повече за нея може да прочетете тук.

Нека разгледаме един пример, при който този метод би ви защитил кода, без да се налага да правите проверка на получените през $_REQUEST променливи:

Нека имаме следното URL: http://yourdomain.com/delete.php?id=5

Скрипта, който ще изпълнява дадена операция нека изглежда по следния начин:

CODE
1
2
3
<?php
$sql = "DELETE FROM table WHERE id =". $_REQUEST['id'];
?>

Този скрипт би изпълнил следната заявка

CODE
1
DELETE FROM table WHERE id = 5;

До тук всичко наред. Но представете си че даден потребител има възможността да промени стойноста на $_REQUEST['id'] и напише следното:

http://yoursite.com/delete.php?id=5%20OR%20id!=0

То тогава при горния скрипт ще се изпълни следната заявка:

CODE
1
DELETE FROM TABLE WHERE Id =5 OR id!=0

Предполагам знаете какво означава това: За тези които не знаят - тази заявка ще изтрие реда с id=5 и всички останали редове, които имат id различно от 0, т.е всичко!

За да предотвратите подобни ситурации направете следното:

CODE
1
2
3
<?php
$sql = sprintf('DELETE FROM table WHERE id = %d', $_REQUEST['id']);
?>

Какво точно прави функцията - В нашия случай, тя заменства %d с цяло число получено от $_REQUEST['id']. Ако се предаде на id стойноста 5%20OR%20id!=0, то тогава функцията ще замести %d с 5, тъй като останалите неща не са числа. Ако предадете нещо друго освен числа, то тогава функцията ще замени %d с 0. И както виждате, без много проверки вие защитихте до някаква степен вашия код, за да не може да ви изтрият "със да искат" таблицата!

Разбира се в самата функция може да се използват и други функции, като например следното:

CODE
1
2
3
<?php
$sql = sprintf('DELETE FROM table WHERE name = "%s" ', mysql_real_escape_string($_REQUEST['name']) );
?>

За защита на вашия код има още много неща, които трябва да се направят. Не разчитайте само на това! Винаги трябва да имате контрол над стойностите, които се предават към вашия код. Винаги трябва да ги проверявате и да знаете техния тип, било то string, int или double. Даже е хубаво при проверката веднага да ги превръщате в съответния тип typecasting. Ето и пример:

Да кажем ще получавате стойност на дадено id. Тогава правите следното:

CODE
1
2
3
<?php
$id = (int) $_REQUEST['id'];
?>

или

CODE
1
2
3
<?php
$id= int_val($_REQUEST['id']);
?>

и от тук натаък работите с променливата $id.

По този начин вие имате навсякъде контрол върху променливите и техните типове и допринасяте поне малко за сигурноста на вашия продукт. Разбирасе ако някой реши да ви "хакне", все някакси ще успее. Всичко е въпрос на време и опит.



   


Ключови думи: PHP функция MySQL защита на заявка


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 За автора: Mutatos  
Николай Николов се занимава с програмиране на PHP/MySQL повече от 6 години. Заедно с разработката на уеб приложения на PHP, се занимава с Java, XML и Webservices.
   
 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008