Они не синонимы - display: none
, удаляет элемент из потока страницы и отдыха потоков страницы, как будто это не было там.
visibility: hidden
скрывает элемент от представления, но не потока страницы, оставляя пространство для него на странице.
Невозможно безопасно избежать строки без подключения к БД. mysql_real_escape_string ()
и подготовленные операторы нуждаются в подключении к базе данных, чтобы они могли экранировать строку, используя соответствующий набор символов - в противном случае атаки SQL-инъекций все еще возможны с использованием многобайтовых символов.
Если вы только тестирование ,
В противоположность моему другому ответу, эта следующая функция, вероятно, безопасна даже с многобайтовыми символами.
// replace any non-ascii character with its hex code.
function escape($value) {
$return = '';
for($i = 0; $i < strlen($value); ++$i) {
$char = $value[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
Я надеюсь, что кто-то более осведомленный, чем я, скажет мне, почему приведенный выше код не работает ...
Что ж, согласно справочной странице функции mysql_real_escape_string : «mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая экранирует следующие символы: \ x00, \ n, \ r , \, ', "and \ x1a."
Имея это в виду, функция, указанная во второй опубликованной вами ссылке, должна делать именно то, что вам нужно:
function mres($value)
{
$search = array("\\", "\x00", "\n", "\r", "'", '"', "\x1a");
$replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");
return str_replace($search, $replace, $value);
}
В результате дальнейшего исследования я обнаружил:
http: // dev. mysql.com/doc/refman/5.1/en/news-5-1-11.html
В обработке многобайтового кодирования обнаружена дыра в безопасности SQL-инъекции. Ошибка была на сервере, неправильно анализируя строку, экранированную с помощью функции API mysql_real_escape_string () C.
Эта уязвимость была обнаружена и сообщена Джошем Беркусом и Томом Лейном в рамках межпроектного сотрудничества консорциума OSDB в области безопасности. Дополнительную информацию о SQL-инъекции см. В следующем тексте:
Обсуждение. При обработке многобайтового кодирования обнаружена дыра в безопасности SQL-инъекций. Брешь в безопасности SQL-инъекции может включать ситуацию, когда, когда пользователь предоставляет данные для вставки в базу данных, пользователь может внедрять операторы SQL в данные, которые сервер будет выполнять. Что касается этой уязвимости, когда используется экранирование без учета набора символов (например, добавляетlashes () в PHP), можно обойти экранирование в некоторых многобайтовых наборах символов (например, SJIS, BIG5 и GBK). В результате такая функция, как addlashes (), не может предотвратить атаки с использованием SQL-инъекций. На стороне сервера исправить это невозможно. Лучшее решение для приложений - использовать экранирование с учетом набора символов, предлагаемое такой функцией, как mysql_real_escape_string ().
Однако была обнаружена ошибка в том, как сервер MySQL анализирует вывод mysql_real_escape_string (). В результате, даже когда использовалась функция mysql_real_escape_string (), поддерживающая набор символов, SQL-инъекция была возможна. Эта ошибка исправлена.
Временные решения. Если вы не можете обновить MySQL до версии, которая включает исправление ошибки в синтаксическом анализе mysql_real_escape_string (), но запускаете MySQL 5.0.1 или выше, вы можете использовать режим SQL NO_BACKSLASH_ESCAPES в качестве временного решения. (Этот режим был представлен в MySQL 5.0.1.) NO_BACKSLASH_ESCAPES включает стандартный режим совместимости SQL, в котором обратная косая черта не считается специальным символом. В результате запросы не будут выполнены.
Чтобы установить этот режим для текущего соединения, введите следующий оператор SQL:
SET sql_mode='NO_BACKSLASH_ESCAPES';
Вы также можете установить режим глобально для всех клиентов:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
Этот режим SQL также может быть включен автоматически при запуске сервера с помощью параметр командной строки --sql-mode = NO_BACKSLASH_ESCAPES или путем установки sql-mode = NO_BACKSLASH_ESCAPES в файле параметров сервера (например, my.cnf или my.ini, в зависимости от вашей системы). (Ошибка № 8378, CVE-2006-2753)
См. Также Ошибка № 8303.