Вопрос по безопасности передачи данных из формы.

12 3
Sly32
На сайте с 29.03.2012
Offline
302
1305

Пользователь заполняет форму и отправляет данные. Они пишутся в таблицу в БД Mysql, из которой потом формуируется страничка на сайте.

Переданные данные обрабатываю предварительно так:

<?php $f_dopusl = addslashes(strip_tags(trim($_POST['firm_dopusl']), '<p><br><h1><h2><h2><h3><h4><ul><ol><li>'));?>

Что еще нужно сделать, чтоб враги не внедрили какую гадость?

сайт на WP

---------- Добавлено 07.05.2014 в 12:58 ----------

судя по форуму, может нужно и с квадратными скобками бороться?

siv1987
На сайте с 02.04.2009
Offline
427
#1

addslashes - заменить на *_escape_string

также не забывать что у тегов могут быть разные js события onmouseover и тд.

Sly32
На сайте с 29.03.2012
Offline
302
#2

А можно поподробнее про *_escape_string - что вместо звездочки? нашел

mysql_real_escape_string - это?

siv1987
На сайте с 02.04.2009
Offline
427
#3

mysql(i)?_real_escape_string, смотря какое расширение для доступа к бд у вас используется. А вообще если используете ВП, лучше юзать встроенные функции которые умеют правильно экранировать данные http://codex.wordpress.org/Data_Validation

Sly32
На сайте с 29.03.2012
Offline
302
#4

Заменил addslashes на mysql_real_escape_string (mysqli_real_escape_string) Данные перестали передаваться из формы.

Добавил обработку переменной с помощью - esc_sql() - прикрыло вообще все тэги \n соответственно теряется все форматирование - не подходит... как быть?

в моем варианте ни один лишний тэг не пропускает но вот вопрос с командами sql как от них обезопасится?

siv1987
На сайте с 02.04.2009
Offline
427
#5
Sly32:
в моем варианте ни один лишний тэг не пропускает

Вы забываете что у тегов есть еще атрибуты.

Sly32:
но вот вопрос с командами sql как от них обезопасится?

http://codex.wordpress.org/Data_Validation


$wpdb->insert( 'mytable', array('myrow' => $value) );

$wpdb->prepare(
'INSERT INTO table (myrow) VALUES (%s)',
$value, //an unescaped string (function will do the sanitization for you)
);

и тд

Sly32
На сайте с 29.03.2012
Offline
302
#6
siv1987:
Вы забываете что у тегов есть еще атрибуты.

В силу малоопытности не очень понимаю как это может пройти - обьясните на примерах ?



$wpdb->insert( 'mytable', array('myrow' => $value) );

$wpdb->prepare(
'INSERT INTO table (myrow) VALUES (%s)',
$value, //an unescaped string (function will do the sanitization for you)
);

попытался добавить prepare - перестала работать запись. Где то нарушил синтаксис. в VALUES нужно %s или %d указывать через запятую количеством в строгом соответствии с $value?

делал так:


$wpdb->query(
$wpdb->prepare(
"INSERT INTO `my_table` ( id, post_content, meta_value, post_excerpt ) VALUES ( %d, %s, %d, %s )",
array(
NULL,
$metakey,
0,
' '
)
)
);
siv1987
На сайте с 02.04.2009
Offline
427
#7
Sly32:
В силу малоопытности не очень понимаю как это может пройти - обьясните на примерах ?

<p onmouseover="alert(1);">текст</p>

Sly32:
попытался добавить prepare - перестала работать запись. Где то нарушил синтаксис. в VALUES нужно %s или %d указывать через запятую количеством в строгом соответствии с $value?

id null не обязательно указать если он null.

Примерно так. Попробуйте метод insert

Sly32
На сайте с 29.03.2012
Offline
302
#8

Добавил еще регулярку которая просто убирает всякие drop и onmouse..

метод update, оказывается, автоматически экранирует кавычки.

Спасибо за подсказку с null - попробую. Я уже ночью во сне тоже пришел к выводу что нужно попробовать убрать.

dkameleon
На сайте с 09.12.2005
Offline
386
#9
Sly32:
Добавил еще регулярку которая просто убирает всякие drop и onmouse..

ой-ой-ой-ой.... руки прочь от компьютера!

для начала вам надо определиться, что пользователю можно отправлять и что вы хотите показывать.

что за форма?

Дизайн интерьера (http://balabukha.com/)
Sly32
На сайте с 29.03.2012
Offline
302
#10
dkameleon:
ой-ой-ой-ой.... руки прочь от компьютера!

для начала вам надо определиться, что пользователю можно отправлять и что вы хотите показывать.
что за форма?

Я б вам дал доступ на сайт в тест, но боюсь - вдруг вы мне все уничтожите))))

В форме пользователь заполняет данные о своей фирме- должен быть минимальный обьем доступных тегов для форматирования документа, данные на русском языке, поэтому все эти дропы могу смело запрещать. Доступны абзацы, переносы, заголовки, списки и по мелочи. Для этого к текстареа подключил JS вставку тегов, остальные закрыл как писал выше. Сам метод update как выяснилось добавляет слэши к кавычкам, так что возникла проблема - не работает вставка стилей через спан. Но это некритично.

И вообще что-то мне уже кажется, что я заморачиваюсь больше чем надо. Но все советы с благодарностью приму, так же как и примеры готовы решений.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий