Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Безопасный ввод текста
Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Как сделать "защиту от дураков и хакеров"?
Есть текстовое поле, которое отправляется на сервер. Какими командами убрать всё HTML тэги, заменить кавычки?
Не отправляйте в поиск, мне не лень, я спрашиваю чтобы ничего не забыть:
Какой функцией заменить одинарные кавычки на ’ ?
Чем отличаются strip_tags от htmlspecialchars, кого лучше использовать?
OrmaJever
Отправлено: 25 Июля, 2012 - 12:02:32
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Чем отличаются strip_tags от htmlspecialchars, кого лучше использовать?
strip_tags просто удаляет все html теги из строки, просто заменяет их на пустоту, а htmlspecialchars заменяет спец символы на их сущности, который бразер читает как обычные символы и не парсит их, как html страницу, прочитайте описание этих функци, я оставил вверх сылки.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Dazar
Отправлено: 25 Июля, 2012 - 12:12:26
Частый гость
Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Спасибо, я так понял, чтобы у меня MYSQL не выдавал ошибку(если в запросе SET text='$text', а переменная $text содержит одинарные кавычки), нужно прописать $text=preg_replace("'", "’", $text); я прав? (Добавление)
Или можно просто использовать addslashes?
dadli
Отправлено: 25 Июля, 2012 - 12:17:50
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011 Откуда: тифилис
Помог: 5 раз(а)
Dazar
лучше mysql_escape_string()
Dazar
Отправлено: 25 Июля, 2012 - 12:23:23
Частый гость
Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Итого:
Пользователь вводит сообщение, а я его:
$text=$_POST['text']; // получил
$text=strip_tags($text); //убрал теги
$text=mysql_escape_string($text);// защитился от ошибок MySQL
Я ничего не забыл?
Zuldek
Отправлено: 25 Июля, 2012 - 13:44:46
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
0. Понятия не имею в какой кодировке вы получаете тексты, но, на всякий случай, лучше используйте mysql_real_escape_string вместо mysql_escape_string.
1. Обрезайте пришедший текст по длине в пределах, которые ожидаете получить.
2. Не лишним будет проверка на наличие в запросе синтаксиса SQL:
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Zuldek пишет:
Не лишним будет проверка на наличие в запросе синтаксиса SQL:
Лишним. И совершенно вредным.
----- PostgreSQL DBA
Zuldek
Отправлено: 25 Июля, 2012 - 14:03:09
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Мелкий пишет:
Zuldek пишет:
Не лишним будет проверка на наличие в запросе синтаксиса SQL:
Лишним. И совершенно вредным.
Если критично не дергать субд запросами, можно отсечь их фильтрами. Безопасными эти запросы будут и так, но от нагрузки обработчик запросов это не избавит. Потому исправил бы, на "возможно не лишним, в некоторых частных случаях..." .
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Определённо, непременно, лишним.
Если у вас конечное количество валидных данных - на этот список и проверяйте.
Если данные чисто текстовые - никакого лишнего изменения оных быть не должно. Безобиднейшие "selection sort", "please, delete this message", "updates available!" с какого-то перепуга получат сообщение о SQL инъекции.
----- PostgreSQL DBA
Dazar
Отправлено: 25 Июля, 2012 - 22:46:57
Частый гость
Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Zuldek пишет:
0. Понятия не имею в какой кодировке вы получаете тексты, но, на всякий случай, лучше используйте mysql_real_escape_string вместо mysql_escape_string.
Все страницы и база данных в utf-8. А чем отличаются эти функции?
Dazar
Отправлено: 26 Июля, 2012 - 13:35:40
Частый гость
Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
mysql_real_escape_string -- Экранирует специальные символы в строке, используемой в SQL-запросе, принмимая во внимание кодировку соединения.
вот оно что)
просто даня
Отправлено: 26 Июля, 2012 - 14:20:15
Посетитель
Покинул форум
Сообщений всего: 357
Дата рег-ции: Март 2012 Откуда: sev-kav, budennovsk
# выдаст "<a href="reklama.ru">reklama.ru</a><br>Приходите к нам у нас самое лучшее говно!<br><a href="reklama.ru">reklama.ru</a>"
# а в браузере будет выглядит так "<a href="reklama.ru">reklama.ru</a>
# Приходите к нам у нас самое лучшее говно!
# <a href="reklama.ru">reklama.ru</a>"
# то есть в том же виде в котором и было отправлено юзером...
DelphinPRO
Отправлено: 26 Июля, 2012 - 16:33:45
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
просто даня как раз для этого есть функция htmlspecialchars ;)
----- Чем больше узнаю, тем больше я не знаю.
LIME
Отправлено: 26 Июля, 2012 - 16:39:50
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
1ый реплэйс - nl2br
а другие я вообще не понимаю
шило на мыло
и как быть с инъекциями? (Добавление) просто даня твой портал еще жив?))
дай ссылку посмотреть))
просто даня
Отправлено: 26 Июля, 2012 - 19:29:17
Посетитель
Покинул форум
Сообщений всего: 357
Дата рег-ции: Март 2012 Откуда: sev-kav, budennovsk
Помог: 1 раз(а)
[+][+]
city.budennovsk.ru
reklamack.ru
другие не дам, те плохо защищены) то есть я там защиту от таких как вы ХАКЕРОВ еще не доделал) лень) (Добавление)
зачем иметь мозги себе и другим всякими заумными функциями когда можно сделать все это самой простой функцией str_replace))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.