Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Устойчивость формы к "хулиганам" и хакерам, Проверка данных (текста) на безопасность 
:(
    Опции темы
linuxoid
Дата 3.7.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте коллеги!

Мне сложно сформулировать вопрос, поэтому и найти на него ответ в поиске форума я не смогу... 

Хочется узнать с вашего опыта в данной области. Как максимально обезопасить форму от недоброжелателей и взломщиков. Т.е. это проверка на валидность/корректность и на вредоносность введенных данных. Какие меры предпринять, чтобы избежать неприятностей. Пример: ограничить макс. кол-во символов для ввода номера телефона. Например не более 10. Проверка на e-mail - простенькая и так же с ограничением. Например не более 100 символов. А вот как обработать текст правильно?? Чтобы избежать таких символов, как ; или проигнорировать скрипт или другие возможные варианты... Надеюсь вы понимаете о чем идет речь... Буду рад от вас услышать хотя бы советы или код. Спасибо.

Это сообщение отредактировал(а) linuxoid - 3.7.2009, 18:19
PM MAIL   Вверх
morfus
Дата 3.7.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



Цитата(linuxoid @  3.7.2009,  18:19 Найти цитируемый пост)
обезопасить форму от недоброжелателей и взломщиков

Ничего не надо "обезопасивать", никакие данные из формы не могут быть опасны, опасно не правильное их использование...

Подробности: http://phpfaq.ru/slashes
PM MAIL WWW   Вверх
SoWa
Дата 3.7.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



используй в обработчике функцию preg_match
И ей передавай регулярные выражения проверки на корректность данных.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
patap
Дата 3.7.2009, 21:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



1. register_globals = off
2. эскейпить входные данные если ожидается строка - mysql_escape_string();
3. фильтровать теги
4. если ожидается число - приводить его к нужному типу - intval(); floatval();

одним словом - все шо подставляется в запрос, необходимо обрабатывать


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
morfus
Дата 3.7.2009, 22:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



patap, вредные советы ?

Цитата(patap @  3.7.2009,  21:28 Найти цитируемый пост)
фильтровать теги

Тогда давайте ещё дальше пойдём, отменим любой пользовательский ввод. В прочем о чём это я, давайте лучше вообще не будем использовать РНР и будем делать сайты только в статике...

Хотя нет зачем, давайте вообще выключим компьютеры, нет компа нет проблем )))


Цитата(patap @  3.7.2009,  21:28 Найти цитируемый пост)
приводить его к нужному типу 

Сразу баш вспоминается "читаю ТЗ, заказчик просит на всякий случай после проверки если в поле телефона были только цифры привести их к числовому типу, так на всякий случай, для безопасности"

Или вот
Код

if (cond == true) {
# если да
} elseif (cond == false) {
# если нет
} else {
# а вдруг...
}

PM MAIL WWW   Вверх
patap
Дата 3.7.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



Цитата

приводить его к нужному типу


допустим есть такое
Код

<select name="par">
   <option value="1">value 1</option>
   <option value="2">value 2</option>
   <option value="3">value 3</option>
</select>


почему нельзя сделать так 
Код

<select name="par">
   <option value="Здесь Запрос">value 1</option>
   <option value="2">value 2</option>
   <option value="3">value 3</option>
</select>


и отослать на сервер?
зачем это эскейпить, если мы однозначно знаем что тут будет число?  Или я тут ошибаюсь? ну по крайней мере, я так всегда делаю

Цитата

фильтровать теги


допустим ожидаем сообщение на форуме, в сообщение вставляется ява скрипт, и делает свое дело. Или как избавиться от "вредных" тегов?


Это сообщение отредактировал(а) patap - 3.7.2009, 23:09


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
zetxi815eb
Дата 3.7.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



linuxoid, юзай регулярки. Вот например регулярка для e-mail:

Код

preg_match('#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$#si', $email);


А вообще вот эта комбинация защитит тебя от хакерских атак типа SQL-injection и XSS:

Код

$text = htmlspecialchars(mysql_escape_string($text));

PM MAIL   Вверх
morfus
Дата 3.7.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



Цитата(zetxi815eb @  3.7.2009,  23:09 Найти цитируемый пост)
эта комбинация защитит тебя от хакерских атак типа SQL-injection и XSS

Ага защитит, а за одно защитит твой сайт от посещений пользователями ))) (точнее один раз может случайно из поиска зайдут, но на этом пожалуй и всё)

Ребята вопрос на засыпку...

Вот я например пишу: "format c:" странно, но сервер на котором работает vingrad.ru почему-то не форматнулся... Посмотрите HTML-код этой странички, фраза "format c:" не отфильтрована и не конвертирована, это так сильно повлияло на безопасность ?

Данные надо обрабатывать не в зависимости откуда они пришли, а в зависимости куда они уйдут ! ©
PM MAIL WWW   Вверх
zetxi815eb
  Дата 4.7.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(morfus @ 3.7.2009,  23:28)
Цитата(zetxi815eb @  3.7.2009,  23:09 Найти цитируемый пост)
эта комбинация защитит тебя от хакерских атак типа SQL-injection и XSS

Ага защитит, а за одно защитит твой сайт от посещений пользователями ))) (точнее один раз может случайно из поиска зайдут, но на этом пожалуй и всё)

Ребята вопрос на засыпку...

Вот я например пишу: "format c:" странно, но сервер на котором работает vingrad.ru почему-то не форматнулся... Посмотрите HTML-код этой странички, фраза "format c:" не отфильтрована и не конвертирована, это так сильно повлияло на безопасность ?

Данные надо обрабатывать не в зависимости откуда они пришли, а в зависимости куда они уйдут ! ©

не вижу связи посещаемости сайта с защитой от ввода некорректных данных в формы.
Приток пользователей с поисковиков зависит от качества внутренней и внешней оптимизацией.

А данные фильтруются, чтоб какой-нибудь "продвинутый юзер" не дропнул тебе все таблице в БД с помощью SQL-INJECTION 

Это сообщение отредактировал(а) zetxi815eb - 4.7.2009, 00:53
PM MAIL   Вверх
morfus
Дата 4.7.2009, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



Цитата(zetxi815eb @  4.7.2009,  00:53 Найти цитируемый пост)
данные фильтруются, чтоб какой-нибудь "продвинутый юзер" 

Я привёл пример

Я могу написать в эту самую форму (в которую пишу сейчас) опасные данные вроде
format c:
' or 1=1
и прочие...
даже
<?php system('format c:');?>
или
<script>alert(document.cookie)</script>

Ничего из этого не вырезано и не фильтрованно, всё отображается и никаких угроз безопасности нет...

Дальше думайте сами...


Цитата(zetxi815eb @  4.7.2009,  00:53 Найти цитируемый пост)
не вижу связи 

И не увидите, если у вас в в блоге фильтруются комментарии то дельные комментарии никто запостить и не сможет (их просто отфильтрует автомат)
PM MAIL WWW   Вверх
nerezus
  Дата 4.7.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

2. эскейпить входные данные если ожидается строка - mysql_escape_string();
 НЕТ.
Эскейпить данные нужно ПРЯМО перед запросом. Как правило современные интерфейсы делают это за тебя и самому ничего не надо эскейпить.
Не нужно юзать устаревние mysql_*

Цитата

А вообще вот эта комбинация защитит тебя от хакерских атак типа SQL-injection и XSS:
код PHP
$text = htmlspecialchars(mysql_escape_string($text));
 А еще лучше делать так: $text = 'испорченный текст';
Столько же смысла.
Если кто не понял - то я стебусь над нелепым кодом.

Цитата

не вижу связи 
 http://www.php.net/manual/ru/ почитай на досуге. Увидишь ;)
Я серьезгно - твой уровень знаний очень низок. Если ты не будешь воппринимать мою фразу в штыки - то я объясню, почему.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
icewind
Дата 4.7.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



morfus, сам сначала бы посмотрел исходный код страницы
Цитата

&lt;?php system('format c:');?&gt;<br />или<br /><script&gt;alert(document.cookie)&lt;/script&gt;

до абсурда, конечно, доводить не надо, но есть определенные действия которые нужно делать. Эскейпить символы ПЕРЕД запросом, следить за тем, чтоб тэги, которые ввел пользователь не вывалились в чистом виде на страницу и т.д.


--------------------
user posted image
PM MAIL Skype   Вверх
ksnk
Дата 4.7.2009, 14:57 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



nerezus, в качестве офтопика - а почему цитаты без привязки к имени пользователя? Вроде бы в Хроме уже действуют "быстрые цитаты", еще есть какой броузер?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
nerezus
Дата 4.7.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Хм, как-то не задумывался о такой фишке =)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
linuxoid
Дата 5.7.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Цитата(nerezus @ 4.7.2009,  14:10)
Цитата

2. эскейпить входные данные если ожидается строка - mysql_escape_string();
 НЕТ.
Эскейпить данные нужно ПРЯМО перед запросом. Как правило современные интерфейсы делают это за тебя и самому ничего не надо эскейпить.
Не нужно юзать устаревние mysql_*

Цитата

А вообще вот эта комбинация защитит тебя от хакерских атак типа SQL-injection и XSS:
код PHP
$text = htmlspecialchars(mysql_escape_string($text));
 А еще лучше делать так: $text = 'испорченный текст';
Столько же смысла.
Если кто не понял - то я стебусь над нелепым кодом.

Цитата

не вижу связи 
 http://www.php.net/manual/ru/ почитай на досуге. Увидишь ;)
Я серьезгно - твой уровень знаний очень низок. Если ты не будешь воппринимать мою фразу в штыки - то я объясню, почему.


Стебаешься? Может лучше объяснишь по конкретней? А то дал ссылку на мануал, а толку.. Тоже говорит об уровне...

Мне понравился ваниант с htmlspecialchars() и mysql_escape_string(utf8_encode()) вместо addslashes(), но многие тут судя по всему не согласны с этим. Объясните плиз почему??

Из того же мануала: 
Цитата

pg_escape_string() escapes a string for insertion into the database. It returns an escaped string in the PostgreSQL format. Use of this function is recommended instead of addslashes(). 

Цитата

htmlspecialchars() Эта функция полезна при отображении данных, введенных пользователем, которые могут содержать нежелательные HTML тэги, например в форуме или гостевой книге.


Я вижу такой вариант применения. Сначала пропускаем текст через trim(), htmlspecialchars(), потом pg_escape_string(utf8_encode()) и вставляем в базу?? Если нет, то обоснуйте свою позицию, как лучше сделать. Спс.



Это сообщение отредактировал(а) linuxoid - 5.7.2009, 13:01
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.