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

Разное

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

 

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

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

тема: Уязвимость функции mysql_escape_string
 
 автор: forma   (14.12.2009 в 14:11)   письмо автору
 
 

С сайта php.net:
Warning
This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

This function became deprecated, do not use this function. Instead, use mysql_real_escape_string(). 


Почему функция была удалена в php 6, какая в ней уязвимость(если вообще)?
Задолбаюсь я ходить по скриптам и менять название функции :)

  Ответить  
 
 автор: Trianon   (14.12.2009 в 14:23)   письмо автору
 
   для: forma   (14.12.2009 в 14:11)
 

Удалена из-за некорректной работы (не учитывается кодировка обрабатываемого текста,
что может повлечь неверное экранирование, а значит - искажение данных и/или SQL-injection-уязвимость.
Проявляется в многобайтовых кодировках восточного региона)

  Ответить  
 
 автор: Lelik   (14.12.2009 в 17:59)   письмо автору
 
   для: Trianon   (14.12.2009 в 14:23)
 

а если я использую кодировку UTF-8, но для русского текста, то всё нормлаьно или лучше таки реальный эскэйп?

  Ответить  
 
 автор: Fractured#   (14.12.2009 в 18:15)   письмо автору
 
   для: Lelik   (14.12.2009 в 17:59)
 

Сейчас лучше всегда использовать mysql_real_escape_string(), поскольку mysql_escape_string() "has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0".

Но для UTF-8 разницы никакой нет.

  Ответить  
 
 автор: Trianon   (14.12.2009 в 18:44)   письмо автору
 
   для: Lelik   (14.12.2009 в 17:59)
 

многобайтовые кодировки восточного региона - это не utf-8
В utf-8 различия в эскейпинге не проявляются независимо от языка.
К счастью, потому что сейчас дыр нет.
К сожалению, потому что это не вынуждает бросаться и менять функции в режиме ПирямЩаз!
А менять надо. Уберут когда - рухнет всё.
И менять надо осмотрительно.
У многих она вызывается еще до установления соединения с сервером. Что само по себе засада.

  Ответить  
 
 автор: Lelik   (14.12.2009 в 18:59)   письмо автору
 
   для: Trianon   (14.12.2009 в 18:44)
 

>И менять надо осмотрительно.
>У многих она вызывается еще до установления соединения с сервером. Что само по себе засада.

это как?

  Ответить  
 
 автор: Trianon   (14.12.2009 в 19:07)   письмо автору
 
   для: Lelik   (14.12.2009 в 18:59)
 

как в том случае, когда экранирование всех входящих параметров без разбора выполняется в начале скрипта. А mysql_connect - позднее.

  Ответить  
 
 автор: Lelik   (14.12.2009 в 20:04)   письмо автору
 
   для: Trianon   (14.12.2009 в 19:07)
 

ясно. спасибо.

  Ответить  
 
 автор: cheops   (15.12.2009 в 12:04)   письмо автору
 
   для: Trianon   (14.12.2009 в 18:44)
 

Короче, так и придется переходить на режим удаления магических кавычек и переносить экранирование кавычек ближе к SQL-запросу в фукнции-обертки.

  Ответить  
 
 автор: Trianon   (15.12.2009 в 12:30)   письмо автору
 
   для: cheops   (15.12.2009 в 12:04)
 

Либо вообще убрать экранирование. Применять интерфейсы с плэйсхолдерами и биндингом параметров. Подобные mysqli .

Всё ж таки обертками красиво формализуется не всё...
Ну и есть такая поганая штука, как синтаксис операции LIKE , выбивающаяся из ряда.
Там, чтобы честно заэкранировать всё необходимое, ужом вывернуться нужно.

  Ответить  
 
 автор: cheops   (15.12.2009 в 12:46)   письмо автору
 
   для: Trianon   (15.12.2009 в 12:30)
 

Да к mysqli тоже присматриваемся, даже попробовали в нескольких проектах...

  Ответить  
 
 автор: Trianon   (15.12.2009 в 12:55)   письмо автору
 
   для: cheops   (15.12.2009 в 12:46)
 

Вот там уж точно без оберток не обойтись... Столько всяких кю сказать приходится, притопов с прихлопами сделать, пока запрос выполнишь в стиле этого интерфейса, что первая мысль у меня была "Да зачем я только за этот impruved клиент схватился... так просто и хорошо было со старым..."

  Ответить  
 
 автор: Eugene77   (18.12.2009 в 20:24)   письмо автору
 
   для: Trianon   (15.12.2009 в 12:55)
 

> Столько всяких кю сказать приходится, притопов с прихлопами сделать, пока запрос выполнишь в стиле этого интерфейса, что первая мысль у меня была "Да зачем я только за этот impruved клиент схватился... так просто и хорошо было со старым..."

Так может и не надо?
А если надо, то тогда почему именно?

  Ответить  
 
 автор: Trianon   (18.12.2009 в 20:41)   письмо автору
 
   для: Eugene77   (18.12.2009 в 20:24)
 

Это уж каждый для себя сам решает.

  Ответить  
 
 автор: Eugene77   (19.12.2009 в 19:52)   письмо автору
 
   для: Trianon   (18.12.2009 в 20:41)
 

Для ученика важно мнение профи:
Какой материал важен для освоения, а какой малозначителен.

  Ответить  
 
 автор: ~AquaZ~   (14.12.2009 в 17:46)   письмо автору
 
   для: forma   (14.12.2009 в 14:11)
 

mysql_real_escape_string
[quote]Экранирует специальные символы учитывая кодировку текущего MySQL соединения. При попытке вызова при отсутствующем соединении, вызывает ошибку.[/quote]

  Ответить  
 
 автор: Fractured#   (14.12.2009 в 17:56)   письмо автору
 
   для: ~AquaZ~   (14.12.2009 в 17:46)
 

Как твой пост отвечает на вопрос автора, с позволения сказать?

  Ответить  
Rambler's Top100
вверх

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