Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
nazaarych
Заблокирован
1

Список уязвимостей при сохранении текста на сайте

24.12.2016, 16:06. Просмотров 861. Ответов 16
Метки нет (Все метки)

Нужно дать возможность посетителю сайта сохранить текст, который может содержать примеры кода. Нет проблем если он пишет или копипастит в contenteditable div, там при переносе в textarea браузер автоматом заменяет так как нужно. Например: <script> меняется на &lt;script&gt; <?php ... ?> на &lt;?php ... ?&gt;
Но пользователь может непосредственно редактировать textarea(не всегда браузер расставляет теги так как хочется). Есть ссыль где посмотреть список того, что нужно отсекать от сохранения в том виде как есть? два случая я привел. Этого достаточно или еще есть опасные теги?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2016, 16:06
Ответы с готовыми решениями:

Дублирование при сохранении
Пожалуйста, помогите советом! Имеется скрипт е-мейл рассылок. Все работает...

Ошибка при сохранении загруженного файла
Использую OpenServer/ Для загрузки и сохранения изображений написал такой код:...

Не отображаются фотографии товара при сохранении
Не отображаются фотографии товара при сохранении. При загрузке фотографии...

Ошибка при сохранении файлов на сервер
Доброго времени суток. Несколько дней я работаю над загрузкой фалов, раньше у...

Выбор размера изображения при сохранении
Всем привет! Ребят может кто подскажет как сделать выбор размера изображения...

16
Jewbacabra
Эксперт PHP
3424 / 2850 / 1284
Регистрация: 24.04.2014
Сообщений: 8,647
24.12.2016, 16:23 2
Перед сохранением в бд экранировать мредствами модуля для работы с бд, либо использовать подготовленные выражения.
PHP
1
2
$stmt = $pdo->prepare('INSERT INTO `bla-bla-bla` (`text`) VALUES (:text)');
$stmt->execute([':text' => $_POST['text']]);
При выводе кодировать специальные html символы
PHP
1
echo htmlspecialchars($text);
0
nazaarych
Заблокирован
24.12.2016, 16:31  [ТС] 3
Jewbacabra, про экранирование для базы я понимаю. Волнует обратный вывод в браузер. js будет исполнен. что там еще может быть vbs какойнибудь. если он жив конечно. возможно есть этот список. то чего нельзя отдавать в браузер в чистом виде, а чтобы браузер отобразил это в виде кода.

Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
echo htmlspecialchars($text);
js пролезает на ура
0
Jewbacabra
Эксперт PHP
3424 / 2850 / 1284
Регистрация: 24.04.2014
Сообщений: 8,647
24.12.2016, 16:35 4
Цитата Сообщение от nazaarych Посмотреть сообщение
js пролезает на ура
А если сначала проверить?
PHP
1
echo htmlspecialchars('<script>alert("Hello, World!")</script>');
http://ideone.com/JYFVlq
0
miketomlin
Заблокирован
24.12.2016, 16:35 5
Цитата Сообщение от nazaarych Посмотреть сообщение
js пролезает на ура
Толку от JS внутри закодированного тега script – ноль.
0
nazaarych
Заблокирован
24.12.2016, 17:02  [ТС] 6
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А если сначала проверить?
да проверено, задача-то в другом. Нужно иметь возможность разделять, что из пользовательского ввода будет выполнятся сервером или браузером, а что будет отображено просто в виде кода. И все это может быть на одной странице. Поэтому спрашиваю про список опасных тегов, а не про универсальную функцию которую знают все.
Старинные, экзотические типа vbscript еще чего-нибудь. просто список. Не знаете? ну и ладно.
0
Jodah
Эксперт PHP
2709 / 2380 / 1014
Регистрация: 01.08.2012
Сообщений: 8,409
24.12.2016, 20:47 7
Цитата Сообщение от nazaarych Посмотреть сообщение
что из пользовательского ввода будет выполнятся сервером или браузером, а что будет отображено просто в виде кода
Т.е. юзер может использовать html и как разметку, и как текст?
1
nazaarych
Заблокирован
24.12.2016, 21:02  [ТС] 8
хочу сам определять что идет в htmlspecialchars, а что остаётся. Т.е. htmlspecialchars, только мой собственный.
0
Jodah
Эксперт PHP
2709 / 2380 / 1014
Регистрация: 01.08.2012
Сообщений: 8,409
24.12.2016, 21:25 9
nazaarych, может вам просто BBCode использовать? Стилевые теги ([b], [u], [i] и т.п.) перед выводом заменяем на html-теги. А если юзер напишет что-то внутри тега [code] - выводим в специальном оформлении, с подсветкой синтаксиса и т.п.
0
Jewbacabra
Эксперт PHP
3424 / 2850 / 1284
Регистрация: 24.04.2014
Сообщений: 8,647
24.12.2016, 21:59 10
nazaarych, может это подойдет HTML Purifier?
0
nazaarych
Заблокирован
25.12.2016, 15:17  [ТС] 11
Цитата Сообщение от Jewbacabra Посмотреть сообщение
может это подойдет HTML Purifier?
спасибо. Но я не хочу монстра. Задача на самом деле решается несколькими регулярками. Просто нужен список:
1. <script
2. <?php
3. так далее
мне кажется этот список где-то должен быть. Я не должен отсекать все подозрительное, а только реально угрожающее. Я сам принимаю решение оставляю я этот код или нет. И принцип создаваемой программы - ни строчки от сторонних разработчиков
0
Jewbacabra
Эксперт PHP
3424 / 2850 / 1284
Регистрация: 24.04.2014
Сообщений: 8,647
25.12.2016, 15:24 12
Цитата Сообщение от nazaarych Посмотреть сообщение
спасибо. Но я не хочу монстра.
Нормальная практика. Брать готовое решение и пользоваться им.
Цитата Сообщение от nazaarych Посмотреть сообщение
2. <?php
Безопасен. Php код в браузере не выполняется
Цитата Сообщение от nazaarych Посмотреть сообщение
Задача на самом деле решается несколькими регулярками.
Регулярки подходят, когда нужно разобрать строку, соответствующую несложному шаблону. Парсить html или xml регулярками - плохая идея, всплывет очень много подводных камней, напаример, незакрытые теги которые могут поломать верстку.
0
nazaarych
Заблокирован
25.12.2016, 15:35  [ТС] 13
Цитата Сообщение от Jewbacabra Посмотреть сообщение
незакрытые теги которые могут поломать верстку.
незакрытые теги уже давно закрываются автоматически всеми браузерами. Достаточно обернуть подозрительный текст каким-нибудь <p>
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Безопасен. Php код в браузере не выполняется
зато он выполняется на сервере. Ладно. Это отдельная тема.
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Нормальная практика. Брать готовое решение и пользоваться им.
потом появляется программы в пару гигов, с кодом по теме в 4 кб и тормозящие, так что гуру начинают рассказывать сказки про кешировние. Может проще писать сразу качественный код?
0
miketomlin
Заблокирован
25.12.2016, 15:45 14
Цитата Сообщение от nazaarych Посмотреть сообщение
зато он выполняется на сервере. Ладно. Это отдельная тема.
Чтобы он выполнился, его нужно запустить. Из базы обычно данные читаются, а потом выводятся, не более.
0
Jewbacabra
Эксперт PHP
3424 / 2850 / 1284
Регистрация: 24.04.2014
Сообщений: 8,647
25.12.2016, 16:11 15
Цитата Сообщение от nazaarych Посмотреть сообщение
незакрытые теги уже давно закрываются автоматически всеми браузерами.
Нельзя на это полагаться.
Цитата Сообщение от nazaarych Посмотреть сообщение
потом появляется программы в пару гигов, с кодом по теме в 4 кб и тормозящие, так что гуру начинают рассказывать сказки про кешировние. Может проще писать сразу качественный код?

Не по теме:

Кликните здесь для просмотра всего текста
Т.е. в данном случае удаление небезопасных тегов не является "кодом по теме"?
В таком случае и php нельзя пользоваться, он ведь тормозит по сравнению C. Может проще сразу писать качественный код на C (ассемблере, машинных кодах, решать задачи на аппаратном уровне).


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

Добавлено через 20 минут
Если все же хочется сделать именно самому, то рекомендую вместо регулярок использовать DOMDocument. Но учти что учитывать надо не только теги, но и аттрибуты. Например, даже удалив теги script все еще можно использовать вредоносный js код:
HTML5
1
<a href="javascript:var str='hello';alert(str)">hello</a>
1
miketomlin
Заблокирован
25.12.2016, 16:11 16
Лучший ответ Сообщение было отмечено nazaarych как решение

Решение

nazaarych, может, лучше сделать набор разрешенных тегов, причем без всяких атрибутов, а то придется бороться с навешиваемыми событийными JS-обработчиками и т.п.
1
nazaarych
Заблокирован
25.12.2016, 16:27  [ТС] 17
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Т.е. в данном случае удаление небезопасных тегов не является "кодом по теме"?
В таком случае и php нельзя пользоваться, он ведь тормозит по сравнению C. Может проще сразу писать качественный код на C (ассемблере, машинных кодах, решать задачи на аппаратном уровне).
передёргивать не надо. говнокод на асме пишется даже легче чем на php
хотите говнокода в пыхе нате
PHP
1
2
3
for($i=1;$i<=count($arr);$i++){
echo $arr[$i-1];
}
сплошь и рядом. каждую итерацию цикла происходит запрос размера массива. при обращении к элементу массива происходит лишняя арифметическая операция. Сравнение происходит не одним оператором, а двумя.Не надо про си. Сишники бы вас уже погнали бы ссаными тряпками с дополнительными вызовами ненужной фигни из монструозных библиотек

Добавлено через 2 минуты
Цитата Сообщение от miketomlin Посмотреть сообщение
может, лучше сделать набор разрешенных тегов, причем без всяких атрибутов, а то придется бороться с навешиваемыми событийными JS-обработчиками и т.п.
кстати да! Вот я дурак-то!

Добавлено через 6 минут
miketomlin, Jewbacabra, Jodah, спасибо за обсуждение
0
25.12.2016, 16:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2016, 16:27

Ошибка при сохранении файла из phpexcel
При сохранении файла выдается ошибка: Fatal error: Class...

Добавить поля в тело документа при сохранении
Здравствуйте. На стр. редактирования аккаунта, есть кнопочка, которая js...

Перенос строки при сохранении данных в файл
Здравствуйте. Данные с формы сохраняются в txt файл, но сохраняются сплошной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru