Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: защита - опять 25
 
 автор: tricket   (17.02.2008 в 19:36)   письмо автору
 
 

В общем что-то как-то не задумывался о защите sql запросов.
Да я знал о инъекциях, но я в основном проверял все данные, введенные пользователем при помощи регулярных выражений.
А тут надо сделать поле в котором можно ввести всё что угодно. Ну мой выбор пал на mysql_real_escape_string. Вопрос собственно, код на подобие к примеру

$test=mysql_real_escape_string($_POST['test']);
mysql_query("DELETE FROM users WHERE id=$test");

Возможно ли в этом примере совершить sql-инъекцию?

   
 
 автор: Unkind   (17.02.2008 в 19:47)   письмо автору
 
   для: tricket   (17.02.2008 в 19:36)
 

> Возможно ли в этом примере совершить sql-инъекцию?
Да.

   
 
 автор: tricket   (17.02.2008 в 19:53)   письмо автору
 
   для: Unkind   (17.02.2008 в 19:47)
 

очевидный вопрос как, и как от неё же защитится)
чувствую надо сделать так... я прав?

$test=mysql_real_escape_string($_POST['test']);
mysql_query("DELETE FROM users WHERE id='$test'"); 

   
 
 автор: Unkind   (17.02.2008 в 20:12)   письмо автору
 
   для: tricket   (17.02.2008 в 19:53)
 

Да. Но если это числовое значение - лучше привести переменную к типу integer/float. И тогда апострофы/кавычки будут не нужны.

   
 
 автор: tricket   (17.02.2008 в 20:17)   письмо автору
 
   для: Unkind   (17.02.2008 в 20:12)
 

а плохого в ковычках что?!

   
 
 автор: Unkind   (17.02.2008 в 20:28)   письмо автору
 
   для: tricket   (17.02.2008 в 20:17)
 

Да ничего. Просто если это число, то лучше не таскать его как строку. Да и потом, если на странице будет где-то выводиться значение этой переменной, то без перевода в числовой тип придется тоже обрабатывать данные как строку через htmlspecialchars(), чтобы избежать XSS.

   
 
 автор: tricket   (17.02.2008 в 20:34)   письмо автору
 
   для: Unkind   (17.02.2008 в 20:28)
 

Ну XSS отдельная тема...
а вот, что значит таскать как строку, а именно если тип стобца целое число, а число было в ковычках или без ковычек разницы не будет. В таблицу будет вставлено как число.
Только как я пологаю при общение PHP с mysql будет разница в передачи строки и числа?

   
 
 автор: Unkind   (17.02.2008 в 21:27)   письмо автору
 
   для: tricket   (17.02.2008 в 20:34)
 

> Только как я пологаю при общение PHP с mysql будет разница в передачи строки и числа?
Не будет.

   
 
 автор: tricket   (17.02.2008 в 22:12)   письмо автору
 
   для: Unkind   (17.02.2008 в 21:27)
 

в общем картина более менее прояснилась! спасибо за помощь!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования