Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Использование addslashes(stripslashes())


Автор: SiteLev 1.7.2008, 21:36
Этот вопрос мучает меня давно, поэтому очнь хотел бы получть ответ от людей с опытом
Когда речь идет о добавлении слешей перед добавлением данных в базу,
то встречал в основном такие подходы:

1) Проверить, включено ли magic_quotes и поступать соответственно
2) Ничего не делать, потому, что знаем, что оно включено 
3) Использовать функцию, которая проверяет автоматически , нужно ли вставить слеши и ставит(если не ошибаюсь)

вот вопрос, а почему просто не 
снять слэши, если они есть и добавить снова 
Код

addslashes(stripslashes($data)) 


Что-то меашет этому? 

Спасибо

Автор: Feldmarschall 1.7.2008, 21:48
Все три подхода неправильные.

Вот тебе правильные три подхода:
1. добавлять надо всегда. 
2. magic_quotes отключить. SQL запрос и входящие в скрипт данные - это совершенно разные, не связанные между собой вещи.
3. если мы работаем с mysql, то добавлять надо функцией mysql_real_escape_string

Добавлено @ 21:51
Цитата(SiteLev @  1.7.2008,  21:36 Найти цитируемый пост)
а почему просто не 
снять слэши, если они есть и добавить снова 
addslashes(stripslashes($data)) 

потому что если в тексте встречаются последовательности символов, идентичные результату работы addslashes, эти последовательности будут испорчены. 
то есть, если я сейчас здесь напишу
Цитата

слеш прибавляется к некоторым спецсимволам, например, кавычкам. выглядит это так: \"

то при твоем подходе оно превратится в
Цитата

слеш прибавляется к некоторым спецсимволам, например, кавычкам. выглядит это так: "

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

Автор: Mal Hack 1.7.2008, 22:04
SiteLev, 
http://ru2.php.net/mysql_real_escape_string
Вот что экранирует mysql_real_escape_string:
Цитата
mysql_real_escape_string() вызывает библиотечную функцмю MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \x00, \n, \r, \, ', " and \x1a.

addslaches же:
Цитата
Возвращает сроку str , в которой перед каждым спецсимволом добавлен обратный слэш (\), например для последующего использования этой строки в запросе к базе данных. Экранируются одиночная кавычка ('), дойная кавычка ("), обратный слэш (\) и NUL (байт NULL).

т.е. таким образом мы не обеспечиваем того экранирования, которое нужно сделать для быза. Для других СУ(Р)БД история такая же.
Еще один аргумент привел Feldmarschall.

Что касается magic_quotes...
http://ru2.php.net/manual/ru/info.configuration.php#ini.magic-quotes-gpc
Цитата
This feature has been DEPRECATED and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.


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

Автор: SiteLev 1.7.2008, 22:25
Ок, благодарю за ответы smile

Автор: SiteLev 1.7.2008, 22:55
Если можно, обобщу :

1) Нужно освободиться от автоматически добавленных слэшей 

Код

if(get_magic_quotes_gpc())
$data = stripslashes($data)


2) Экранипровать с помощью функции mysql_real_escape_string 
  
Код

$data = mysql_real_escape_string($data)



Автор: Mal Hack 1.7.2008, 22:59
Цитата(SiteLev @  1.7.2008,  22:55 Найти цитируемый пост)
1) Нужно освободиться от автоматически добавленных слэшей 

Нет. Надо на уровне .htaccess отрубать magic_quotes в трех эпостазиях...

Автор: SiteLev 1.7.2008, 23:06

Как понял, 100% - ного  решения нет, если не трогать настройки сервера?

Это я к тому, что мы не знаем, какие настройки будут на сервере, где наш скрипт будет использован 

Автор: Mal Hack 1.7.2008, 23:12
.htaccess для того и придуман, чтобы на настройки сервера нам было плевать по сути дела. Никто не мешает вам подконфигурировать php как вам нужно, сделав это через .htaccess, естественно в пределах прав доступа...

Автор: SiteLev 2.7.2008, 20:42
Спасибо, буду иметь в виду smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)