Intereting Posts
перечисление таможенных таксономий? get_post_type_object () не работает с switch_to_blog () Как безопасно сохранять пароль в качестве поля настроек Страницы жесткого кода в тему для сетевой (многоуровневой) установки Плагин генерировал XXX символов неожиданного вывода … помочь? Почему get_users неожиданно возвращают дубликаты? Отображать таксономию детей до последнего ребенка Как добавить элемент управления версиями в рабочий процесс? Проблемы с jQuery UI Tools (Flowplayer) Выделите проблемы с комментариями автора WPAlchemy MediaAccess, вставляющий медиа-ссылку в редакторе WP вместо пользовательского поля в метабоксе Пустая страница для edit.php Зарегистрировать всех пользователей вне всех мест через 24 часа Я пытаюсь найти базовый плагин для отображения изображений в виджетах Когда задана страница «Первая страница и сообщения», можно ли просто иметь front-page.php в качестве домашней страницы?

Эхо-JavaScript безопасно

Я работаю над стороной проверки данных моей темы WordPress. У меня есть опция, когда пользователь может вводить JS в бэкэнд, и тот же вывод выводится в интерфейсе между тегами скрипта.

Проблема, с которой я столкнулась, заключается в том, что я не могу найти функцию WordPress, которая позволяет передавать только JavaScript. Что делать, если пользователь вводит в него какой-то мусор, CSS / HTML?

Есть ли какая-либо функция в ядре WordPress / PHP, которую я могу использовать? Или мне нужно просто повторить это сразу?

То, о чем вы просите, невозможно, нет такой вещи, как безопасный блок ввода javascript.

Даже если мы снимаем лишние сценарии и теги стиля, это бессмысленно, так как сам код javascript по своей сути опасен и может создавать любые элементы, которые он хочет, используя конструкцию DOM, например:

var s = jQuery( 'script', { 'src': 'example.com/dangerous.js' } ); jQuery('body').append( s ); 

Или

 var s = jQuery( 'link', { 'rel': 'stylesheet', 'type': 'text/css', 'href': 'example.com/broken.css' } ); jQuery('body').append( s ); 

Nevermind что-то, что крадет ваши файлы cookie для входа в систему и т. Д. Javascript по своей сути опасен, а то, что вы пытаетесь реализовать, – это вектор атаки. Это происходит не потому, что люди могут вырваться из javascript, а потому, что сам javascript потенциально опасен

Из этого ответа: https://wordpress.stackexchange.com/a/107558/76059

Если вы хотите, чтобы пользователь мог вводить свой собственный код Javascript, но вы не хотите, чтобы они вводили какой-либо HTML-код, вы можете использовать что-то вроде этого:

 preg_match( '/\A<script((?!<[a-zA-Z])[\s\S])*</script>\Z/', trim($input) ); 

Функция trim удаляет пробелы с начала и конца, а шаблон regex будет соответствовать строке только в том случае, если она начинается с '<script' , заканчивается '</script>' и не имеет никаких символов '<' письмом. Это должно эффективно удерживать любой случайный HTML-код, позволяя пользователю поместить некоторый код Javascript с использованием оператора меньше, если это необходимо по какой-то причине.

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

Вы не должны позволять пользователям вводить JS-код. Пользователи не являются разработчиками и не должны писать код. Как только пользователь пишет код, ответственность за что-нибудь плохое может произойти на нем, и есть очень малое, что вы можете или должны сделать, потому что все это его сайт, и если он хочет написать код, то кто вы скажете ему «нет ».

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