Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Заблокирован

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

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

Студворк — интернет-сервис помощи студентам
Нужно дать возможность посетителю сайта сохранить текст, который может содержать примеры кода. Нет проблем если он пишет или копипастит в contenteditable div, там при переносе в textarea браузер автоматом заменяет так как нужно. Например: <script> меняется на &lt;script&gt; <?php ... ?> на &lt;?php ... ?&gt;
Но пользователь может непосредственно редактировать textarea(не всегда браузер расставляет теги так как хочется). Есть ссыль где посмотреть список того, что нужно отсекать от сохранения в том виде как есть? два случая я привел. Этого достаточно или еще есть опасные теги?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2016, 16:06
Ответы с готовыми решениями:

Форматирование текста при сохранении
Добрый день! У меня такая проблема. Предположим мне нужно записать строку в файл. 1. Как изменить шрифт вывода. Например: жирный,...

Сделать,чтобы при сохранении текста в textBox он сохранялся в configs.ini и при открытии программы подгружался
Вообщем хочу сделать так чтобы при сохранении текста в textBox он сохранялся в configs.ini и при открытии программы он просто подгружался и...

Ошибка при сохранении элементов списка в другой список
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

16
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.12.2016, 16:23
Перед сохранением в бд экранировать мредствами модуля для работы с бд, либо использовать подготовленные выражения.
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
Заблокирован
24.12.2016, 16:31  [ТС]
Jewbacabra, про экранирование для базы я понимаю. Волнует обратный вывод в браузер. js будет исполнен. что там еще может быть vbs какойнибудь. если он жив конечно. возможно есть этот список. то чего нельзя отдавать в браузер в чистом виде, а чтобы браузер отобразил это в виде кода.

Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
echo htmlspecialchars($text);
js пролезает на ура
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.12.2016, 16:35
Цитата Сообщение от nazaarych Посмотреть сообщение
js пролезает на ура
А если сначала проверить?
PHP
1
echo htmlspecialchars('<script>alert("Hello, World!")</script>');
http://ideone.com/JYFVlq
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 16:35
Цитата Сообщение от nazaarych Посмотреть сообщение
js пролезает на ура
Толку от JS внутри закодированного тега script – ноль.
0
Заблокирован
24.12.2016, 17:02  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А если сначала проверить?
да проверено, задача-то в другом. Нужно иметь возможность разделять, что из пользовательского ввода будет выполнятся сервером или браузером, а что будет отображено просто в виде кода. И все это может быть на одной странице. Поэтому спрашиваю про список опасных тегов, а не про универсальную функцию которую знают все.
Старинные, экзотические типа vbscript еще чего-нибудь. просто список. Не знаете? ну и ладно.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,913
24.12.2016, 20:47
Цитата Сообщение от nazaarych Посмотреть сообщение
что из пользовательского ввода будет выполнятся сервером или браузером, а что будет отображено просто в виде кода
Т.е. юзер может использовать html и как разметку, и как текст?
1
Заблокирован
24.12.2016, 21:02  [ТС]
хочу сам определять что идет в htmlspecialchars, а что остаётся. Т.е. htmlspecialchars, только мой собственный.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,913
24.12.2016, 21:25
nazaarych, может вам просто BBCode использовать? Стилевые теги ([b], [u], [i] и т.п.) перед выводом заменяем на html-теги. А если юзер напишет что-то внутри тега [code] - выводим в специальном оформлении, с подсветкой синтаксиса и т.п.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.12.2016, 21:59
nazaarych, может это подойдет HTML Purifier?
0
Заблокирован
25.12.2016, 15:17  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
может это подойдет HTML Purifier?
спасибо. Но я не хочу монстра. Задача на самом деле решается несколькими регулярками. Просто нужен список:
1. <script
2. <?php
3. так далее
мне кажется этот список где-то должен быть. Я не должен отсекать все подозрительное, а только реально угрожающее. Я сам принимаю решение оставляю я этот код или нет. И принцип создаваемой программы - ни строчки от сторонних разработчиков
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.12.2016, 15:24
Цитата Сообщение от nazaarych Посмотреть сообщение
спасибо. Но я не хочу монстра.
Нормальная практика. Брать готовое решение и пользоваться им.
Цитата Сообщение от nazaarych Посмотреть сообщение
2. <?php
Безопасен. Php код в браузере не выполняется
Цитата Сообщение от nazaarych Посмотреть сообщение
Задача на самом деле решается несколькими регулярками.
Регулярки подходят, когда нужно разобрать строку, соответствующую несложному шаблону. Парсить html или xml регулярками - плохая идея, всплывет очень много подводных камней, напаример, незакрытые теги которые могут поломать верстку.
0
Заблокирован
25.12.2016, 15:35  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
незакрытые теги которые могут поломать верстку.
незакрытые теги уже давно закрываются автоматически всеми браузерами. Достаточно обернуть подозрительный текст каким-нибудь <p>
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Безопасен. Php код в браузере не выполняется
зато он выполняется на сервере. Ладно. Это отдельная тема.
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Нормальная практика. Брать готовое решение и пользоваться им.
потом появляется программы в пару гигов, с кодом по теме в 4 кб и тормозящие, так что гуру начинают рассказывать сказки про кешировние. Может проще писать сразу качественный код?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
25.12.2016, 15:45
Цитата Сообщение от nazaarych Посмотреть сообщение
зато он выполняется на сервере. Ладно. Это отдельная тема.
Чтобы он выполнился, его нужно запустить. Из базы обычно данные читаются, а потом выводятся, не более.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.12.2016, 16:11
Цитата Сообщение от nazaarych Посмотреть сообщение
незакрытые теги уже давно закрываются автоматически всеми браузерами.
Нельзя на это полагаться.
Цитата Сообщение от nazaarych Посмотреть сообщение
потом появляется программы в пару гигов, с кодом по теме в 4 кб и тормозящие, так что гуру начинают рассказывать сказки про кешировние. Может проще писать сразу качественный код?

Не по теме:

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


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

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

Решение

nazaarych, может, лучше сделать набор разрешенных тегов, причем без всяких атрибутов, а то придется бороться с навешиваемыми событийными JS-обработчиками и т.п.
1
Заблокирован
25.12.2016, 16:27  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2016, 16:27
Помогаю со студенческими работами здесь

Лишние строки в файле при сохранении текста из memo
При сохранении текста из memo в файл, в файле потом после каждой строки идёт пустая строка. Как сделать так, что бы этой пустой строки...

Ошибка при сохранении русского текста в базу данных
Всем привет. Возникла такая проблема. Пишу на java на Android. Ввожу текст и он сохраняется в базе данных. Если текст на английском, то все...

Delphi XE2 - Ошибка при сохранении японского текста
Здравствуйте! Недавно купил и установил Delphi XE2. Сама Delphi поддерживает восточно-азиатскую письменность. Код (Это VLC Forms...

Кодировка при сохранении текста из memo в буфер обмена
Приветствую ! Необходимо сделать, чтобы по нажатию кнопки, текст из memo сохранялся в буфер обмена. Далее этот текст должен без проблем...

Пропал боковой список при сохранении, открытии файла в office 2007
Как решить эту проблему?


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru