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

123
LovelAss
На сайте с 05.06.2009
Offline
96
#11
Sly32:
Для этого к текстареа подключил JS вставку тегов, остальные закрыл как писал выше.

Лучше используйте BB-коды, а полученный текст прогоняйте через strip_tags + htmlspecialchars.

S3
На сайте с 29.03.2012
Offline
368
#12
LovelAss:
Лучше используйте BB-коды, а полученный текст прогоняйте через strip_tags + htmlspecialchars.

Собственно, strip_tags - первое что сделал. +addslashes. с BB-кодами не разбирался, как их подключить.

htmlspec - именно счас разбираюсь.

А можно привести примеры опасных запросов, которые могут повредить сайт или базу? Можно в личку, хочется проверить защиту)))

S0
На сайте с 28.09.2010
Offline
30
#13

Пожалуйста забудьте о mysql_(real)_escape_string.

Для защиты от sql-inj в цивилизованном мире используют prepared statements(http://www.php.net/manual/ru/pdo.prepared-statements.php).

Для защиты от xss будет достаточно htmlentities и парсера bb-кодов.

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

почему бы пользователю не дать фикс. набор полей, без ХТМЛ, и уже самостоятельно собрать ХТМЛку с тегами?

Дизайн интерьера (http://balabukha.com/)
psics
На сайте с 02.04.2009
Offline
130
#15
Sly32:
Пользователь заполняет форму и отправляет данные. Они пишутся в таблицу в БД Mysql, из которой потом формуируется страничка на сайте.
Переданные данные обрабатываю предварительно так:
<?php $f_dopusl = addslashes(strip_tags(trim($_POST['firm_dopusl']), '<p><br><h1><h2><h2><h3><h4><ul><ol><li>'));?>


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


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

trim - оставляйте в любом случае

Далее если вы с поля ожидаете цифру - то все кроме цифр к примеру = нахер

Не стоит угадывать, что может добавить случайно пользователь.

siv1987
На сайте с 02.04.2009
Offline
427
#16
sima007:
Пожалуйста забудьте о mysql_(real)_escape_string.
Для защиты от sql-inj в цивилизованном мире используют prepared statements

Чем экранирование в prepared statements отличается от экранирования в escape_string?

psics:
Далее если вы с поля ожидаете цифру - то все кроме цифр к примеру = нахер

Какая цифра, если тс даже теги оставил которые не нужно вырезать?

psics:
Не стоит угадывать, что может добавить случайно пользователь.

А что делать если функционал предусматривает не только общение через азбуку морзе посредством цифр и пробелов?

psics
На сайте с 02.04.2009
Offline
130
#17
siv1987:
Чем экранирование в prepared statements отличается от экранирования в escape_string?


Какая цифра, если тс даже теги оставил которые не нужно вырезать?


А что делать если функционал предусматривает не только общение через азбуку морзе посредством цифр и пробелов?

видимо переработал)

S3
На сайте с 29.03.2012
Offline
368
#18

По итогу трехдневных мучений остался примерно там же где начинал.

Выводы (может будет кому-нибудь полезно)

- встроенные в Wordpress функции update и insert уже сами неплохо экранируют, если не нужен большой функционал - применение их вместе с strip_tag вполне достаточно.

- создать свою форму с использованием вышеуказанных и нормальным функционалом для пользователя невозможно. Максимум можно разрешить теги. Эти функции намертво экранируют кавычки, поэтому добавить произвольный стиль не получается.

как бороться не знаю...

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

Какие эти функции экранируют? Экранирование должно произойти перед вставкой в бд.

S3
На сайте с 29.03.2012
Offline
368
#20
siv1987:
Какие эти функции экранируют? Экранирование должно произойти перед вставкой в бд.

update() например экранирует все виды кавычек, например. Именно при записи в базу

123

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