Вставка данных HTML в таблицу БД - PullRequest
1 голос
/ 07 октября 2011

Я использую следующую функцию перед вставкой данных разметки html в таблицу базы данных

function html($data, $db)
{     
    $data = $db->escape_string($data);
    return $data;
}

Но есть проблема: я вижу "/" - косая черта перед каждым "символом Например,

<p style=\"margin-top: 15px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; \">

Как справиться с этой проблемой?

Ответы [ 4 ]

8 голосов
/ 07 октября 2011

Нет, это зависит от того, что делает ваша функция escape_string (). Более того, директива magic_quotes_gpc включена или выключена (по умолчанию она должна быть отключена).

Чтобы безопасно вставить в базу данных, вам нужно использовать mysql_real_escape_string () , НЕТ addlashes () , НЕТ самодельных функций , но эта. Или, что еще лучше, используйте параметризованные запросы, которые освобождают вас от экранирования кавычек. Попробуйте с PDO

РЕДАКТИРОВАТЬ:

увидел теперь тег mysqli, поэтому mysql_real_escape_string () не является опцией, но директива magic_quotes все еще может быть виновником этого.

Если у вас есть magic_quotes, вы можете либо отключить их в своем PHP ini, через ini_set('magic_quotes_gpc',0);, .htacces php_flag magic_quotes_gpc Off, либо выполнить простую функцию, подобную этой:

function escape($value)
{
  if(get_magic_quotes_gpc())
  {
    $value = stripslashes($value);
  }
  //return mysql_real_escape_string($value);  changed after update
  return $value;
}

Убедитесь, что у вас есть открытое соединение перед использованием mysql_real_escape_string (), иначе будет возвращено FALSE.

Кроме того, html НЕ ДОЛЖЕН БЫТЬ ЗАБРОШЕН перед входом в базу данных. Я имею в виду, вам нужно уйти от ВАШИХ ЗАПРОСОВ, и вы достигнете этого с помощью методов, которые я упомянул. HTML и его вредоносность ничего не делает для базы данных.

Html должен быть экранирован при выходе, и только тогда, и вы используете htmlentities () как минимум, но для того, чтобы избежать любых возможных уязвимостей, связанных с инъекцией XSS, необходимы дальнейшие действия , Это сложная тема, требующая большой работы, чтобы избежать невидимых управляющих символов, вредоносных тегов и так далее. Вам нужно еще раз исследовать это и начать читать об угрозах XSS Injection.

В любом случае, запрет на выполнение кода в браузере - это только начало. Не разрешать пользователям писать html прямо на вашей странице (тот же совет применим не только к отправленным пользователем данным, но и ко всему, что поступает извне, например, к параметру $ _GET, к cookie или даже скрытые значения форм), или вы легко столкнетесь с опасной проблемой <script></script>, которая может привести к краже файлов cookie, неправильному перенаправлению, перехвату трафика и многим другим, которые я не могу перечислить здесь. UST htmlentities () обеспечивает хороший уровень защиты от этого, даже несмотря на то, что его вывод не очень хорош.

4 голосов
/ 07 октября 2011
0 голосов
/ 07 октября 2011

Вы получаете с "/", потому что на сервере включен magic_quotes_gpc.Вы должны проверить, включена или нет magic_quotes_gpc.

if (get_magic_quotes_gpc()) {
    $text = stripslashes($text);
}
else {
    $text = $text;
}

используйте get_magic_quotes_gpc () для проверки.

0 голосов
/ 07 октября 2011

Я использую http://php.net/manual/en/function.htmlspecialchars.php и http://www.php.net/manual/en/function.htmlspecialchars-decode.php для хранения HTML в базе данных.

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