Символы, которые я должен знать для внедрения SQL - PullRequest
0 голосов
/ 22 сентября 2011

Я знаю, что вы вылечиваете все с помощью mysql_real_escape_string() (и с htmlspecialchars()), но я хочу знать символы, которые вызывают весь этот беспорядок, от которого все хотят избавиться?

Дело в том, что нам пришлось перенести не созданный нами веб-сайт с одного хоста на другой.

Он был закодирован с нуля, чтобы использовать php, который сейчас устарел и никогда не любил - magic_quotes.

После смены хоста также произошли php.ini изменения, мы столкнулись с множеством неожиданных результатов. У нас нет доступа к php.ini, нет user.ini (5.2.x), и хост недостаточно отзывчив, чтобы предоставить нам некоторые дополнительные функции. Здесь, в Латвии, есть проблема с хостингом, главная из которых

Но да, это уже не по теме. Я просто хочу знать, какие символы те, которые без экранирования , без магических кавычек и без защиты могут вызвать весь этот беспорядок ?

Кроме того, произошла ошибка, когда текст содержал что-то вроде - /ls, что напоминает команду вывода каталога UNIX (хост-ОС) - Метод не реализован.

И похоже, что веб-сайт взаимодействует с базой данных в среде CLI, поэтому проблема /ls. И я хочу подтвердить, что всякий раз, когда вы вводите значение, которое начинается с / и следует команде UNIX, возникает ошибка «Метод не реализован».

P.S. Я не ищу решение, я уже исправил ошибку. Просто хочу знать символы.

Обновление для уточнения

1) На момент написания вопроса я звонил CLI, что выглядит как socket call- unix-domain / TCP. Живи и учись!

2) Если вы прочитаете вопрос полностью, вы увидите, что я исправляю ошибки / дыры, оставленные другими разработчиками. Так как мы взяли на себя ИТ-обслуживание клиентов, они хотели, чтобы мы взяли на себя и их сайт.

3) Поскольку они заплатили много денег за текущий веб-сайт, они не хотят платить еще больше за новый в новой, более совершенной системе.

4) Строка подключения внутри сценариев - $this->db = DB::connect('mysql://'._DB_USER.':'._DB_PASS.'@'._DB_HOST.'/'._DB_NAME.''); - unix-domain Я думаю.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Из Руководства PHP :

mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующему символы: \ x00, \ n, \ r, \, ', "и \ x1a.

2 голосов
/ 22 сентября 2011

Каждая БД будет иметь свои собственные метасимволы как расширения стандартного синтаксиса SQL.Некоторые будут использовать -- для комментариев, другие будут использовать c-style /* */ и т. Д. Каждая БД имеет свои собственные требования к экранированию, поэтому для каждого типа БД в PHP есть функция экранирования.То, что работает для MySQL, может быть совершенно бесполезным, скажем, для Oracle.

Единственным «окончательным» списком символов будут те, которые перечислены в стандартах SQL.Но использование только тех из них в вашей собственной пользовательской функции escape было бы бесполезным, потому что оно не будет включать специфичные для DB нестандартные метасимволы, которые понимает DB.

...