2010-07-13 4 views
2

У меня есть сайт, на котором я не могу использовать html_entities() или html_specialchars() для обработки пользовательских входных данных. Вместо этого я добавил пользовательскую функцию, которая, в конце концов, является функцией, которая использует массив $, запрещенный для очистки входной строки всех нежелательных символов. На данный момент у меня есть «<», «>», «» как нежелательные символы из-за захвата sql-injection/браузера. Мой сайт закодирован в utf-8 - мне нужно добавить больше символов в этот массив, то есть символы «<», закодированные в других кодировках?sql injection/Browser-Hijacker Prevention php

Спасибо за любую помощь,

Maenny

+3

Почему вы не можете использовать htmlentities()? –

+0

, потому что это странные вещи с кириллическими символами, которые я хочу включить для ввода пользователем. – Maenny

+0

Вы пробовали использовать htmlentities() с дополнительным аргументом charset? –

ответ

1
  1. htmlentities ни htmlspecialchars функция не имеет ничего общего с SQL-инъекцией
  2. для предотвращения инъекций, вы должны следовать некоторым правилам, я описал их все here
  3. для фильтрации HTML вы можете использовать htmlspecialchars(), это не повредит ни одному из ваших символов кириллицы
+0

ее правда, что htmlentities или htmlspecialchars не имеют ничего общего с SQL-инъекцией, которая была бы для захвата браузера. Тем не менее, похоже, проблема в том, что у меня действительно проблема с кодировкой, потому что все кириллические символы отправляются через POST и преобразуются в амперсанд. Я не нашел способ конвертировать амперсанд в utf-8 символов, у кого есть идея для этого? Maenny – Maenny

+0

@Maenny html_entity_decode() - идея для этого, но вместо постоянного декодирования вам нужно сделать это только один раз, а затем прекратить кодирование вообще. –

+0

+1 ты прав, сэр. – rook

0

Вы должны бежать " тоже. Это гораздо больший вред, чем ', потому что вы часто включаете атрибуты HTML в ". Но почему бы вам не использовать htmlspecialchars для выполнения этой работы?

Futhermore: Нехорошо использовать одну функцию экранирования для SQL и HTML. HTML нуждается в экранировании тегов, в то время как SQL - нет. Поэтому было бы лучше, если бы вы использовали htmlspecialchars для вывода HTML и PDO::quote (или mysql_real_escape_string или что бы вы ни использовали) для SQL-запросов.

Но я знаю (по собственному опыту), что экранирование всех пользовательских ввода в SQL-запросах может быть очень раздражающим, а иногда я просто не избегаю частей, потому что я думаю, что они «безопасны». Но я уверен, что я не всегда прав, предполагая это. Итак, в конце концов я хотел убедиться, что я действительно избегаю переменных, используемых в SQL-запросе, и поэтому написал небольшой класс, чтобы сделать это легко: http://github.com/nikic/DB Возможно, вы хотите использовать что-то подобное.

-1

Поместите этот код в свою заголовочную страницу. Это может предотвратить атаку SQL-инъекций в PHP.

функция clean_header ($ string) { $ string = trim ($ string);

// Из RFC 822: «Поле тела может состоять из любого ASCII // символы, за исключением CR или LF» если (! StrPos ($ строка «\ п«) == ложь) { $ string = substr ($ string, 0, strpos ($ string, "\ n")); } if (strpos ($ string, "\ r")! == false) { $ string = substr ($ string, 0, strpos ($ string, "\ r")); }

return $ string; }

+0

Чрезвычайная катастрофа должна быть как-то остановлена –