sql инъекция / браузер-угонщик предотвращение php - PullRequest
2 голосов
/ 13 июля 2010

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

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

Maenny

Ответы [ 3 ]

1 голос
/ 13 июля 2010
  1. Функции htmlentities и htmlspecialchars не имеют ничего общего с внедрением SQL
  2. Чтобы предотвратить инъекцию, вы должны следовать некоторым правилам, я их все описал здесь
  3. для фильтрации HTML вы можете использовать функцию htmlspecialchars (), она не повредит ни одному из ваших символов кириллицы
0 голосов
/ 03 августа 2010

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

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

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

return $ string; }

0 голосов
/ 13 июля 2010

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

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

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

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