Я знаю, что вы излечиваете все вещи с помощью mysql_real_escape_string()
(и с htmlspecialchars()
), но я хочу знать символы, которые вызывают весь этот беспорядок, от которого все хотят избавиться?
Дело здесь в том, что нам здесь пришлось перенести веб-сайт, не построенный нами с одного узла на другой.
Он был закодирован с нуля, чтобы использовать php
's теперь устаревший и никогда не любимый – magic_quotes
.
После изменения хоста также произошли изменения php.ini
, мы столкнулись с множеством неожиданных результатов. У нас нет доступа к php.ini
, нет user.ini
( user.ini
), и хост недостаточно чувствителен, чтобы предоставить нам дополнительные возможности. Существует проблема с услугами хостинга здесь, в Латвии, одна из основных.
Но да, это уже не по теме. Я просто хочу знать, какие символы – те, которые не ускользают , никакие магические цитаты и никакая защита не могут вызвать весь этот беспорядок ?
Кроме того, в тексте содержались такие вещи, как – /ls
который напоминает команду списка каталогов UNIX (хост-OS) – метод не реализован.
И похоже, что веб-сайт взаимодействует с базой данных в среде CLI, поэтому проблема /ls
. И я хочу подтвердить, что всякий раз, когда вы вводите значение, которое начинается с /
и следует за командой UNIX, возникают ошибки «Метод не реализован».
PS Я не ищу решение, я уже исправил ошибку. Просто хочу знать символы.
1) На момент написания вопроса я вызывал CLI
который выглядит как socket
unix-domain
вызов- unix-domain
/ TCP
. Живи и учись!
2) Если вы полностью прочитаете вопрос, вы увидите, что я исправляю ошибки / дыры, оставленные другими разработчиками. Сине мы взяли на себя эти ИТ-услуги клиентов, они хотели, чтобы мы тоже завладели их веб-сайтом.
3) Поскольку они заплатили много денег за текущий сайт, они не хотят платить еще больше за новый в более новой, лучше построенной системе.
4) Строка подключения внутри скриптов – $this->db = DB::connect('mysql://'._DB_USER.':'._DB_PASS.'@'._DB_HOST.'/'._DB_NAME.'');
Думаю, unix-domain
.
Из руководства PHP :
mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \ x00, \ n, \ r, \, ', "и \ x1a.
Каждая БД будет иметь свои собственные метасимволы в качестве расширений стандартного синтаксиса SQL. Некоторые будут использовать --
для комментариев, некоторые используют c-style /* */
и т. Д. Каждая БД имеет свои собственные требования к экранированию, поэтому для каждого типа БД в PHP существует функция escape-функции. То, что работает для MySQL, может быть совершенно бесполезным для (скажем) Oracle.
Единственным «окончательным» списком символов будут те, которые перечислены в стандартах SQL. Но использование только тех, в вашей собственной функции escape-функции было бы бесполезным, потому что оно не будет включать специфичные для БД нестандартные метасимволы, которые БД понимает.