Вопрос про Escaping последовательности и функцию – esc_html() в WordPress’е!

12
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
1389

Всем привет!

Подскажите если кто знает, история вкратце такая – люди с WordPress’а забраковали плагин с формулировкой – “Variables and options must be escaped when echo”. Как я понял из их послания, типа не, не, не, не, нельзя просто брать и выводить echo с html кодом, это типа не безопасно и связано с возможными уязвимостями а-ля Cross-site scripting (XSS). Ну хорошо, подумал я нет проблем, есть функции рекомендуемые для перевода строки с изменением символов и типа все как им надо. НО, когда я использую функцию esc_html(‘<a href="’) она действительно изменяет её и в коде становиться &lt;a href=&quot; - но проблема в том, что в браузере просто код выводится и не работает как html.

Не пойму, как можно и им угодить, и чтобы html код работал как html код.

Если кто-то что-то об этом знает :), то заранее всем спасибо за ответы!


Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#1

Кто-нибудь кто знает английский, скажите мне в двух словах что они от меня хотят.

Much related to sanitizing everything, all variables that are echoed need to be escaped when they're echoed, so it can't hijack users or (worse) admin screens. There are many esc_*() functions you can use to make sure you don't show people the wrong data, as well as some that will allow you to echo HTML safely.

At this time, we ask you escape all $-variables, options, and any sort of generated data when it is being echoed. That means you should not be escaping when you build a variable, but when you output it at the end. We call this 'escaping late.'

Besides protecting yourself from a possible XSS vulnerability, escaping late makes sure that you're keeping the future you safe. While today your code may be only outputted hardcoded content, that may not be true in the future. By taking the time to properly escape when you echo, you prevent a mistake in the future from becoming a critical security issue.

This remains true of options you've saved to the database. Even if you've properly sanitized when you saved, the tools for sanitizing and escaping aren't interchangeable. Sanitizing makes sure it's safe for processing and storing in the database. Escaping makes it safe to output.

Also keep in mind that sometimes a function is echoing when it should really be returning content instead. This is a common mistake when it comes to returning JSON encoded content. Very rarely is that actually something you should be echoing at all. Echoing is because it needs to be on the screen, read by a human. Returning (which is what you would do with an API) can be json encoded, though remember to sanitize when you save to that json object!

There are a number of options to secure all types of content (html, email, etc). Yes, even HTML needs to be properly escaped.


Remember: You must use the most appropriate functions for the context. There is pretty much an option for everything you could echo. Even echoing HTML safely.
Я так понял тупо зафигачить все свои echo в esc_html() не проканает, чтобы они от меня отстали, нужно некоторые кусочки обрамить :).
Сергей
На сайте с 01.10.2010
Offline
144
#2
Непонятно что и где надо вывести, но можно попробовать функцию wp_kses. Есть подозрение, что она работает в нужном вам ключе.
Вы знаете, я и сам немного... вебмастер
W1
На сайте с 22.01.2021
Offline
284
#3
Dmitriy_2014 :
Не пойму, как можно и им угодить, и чтобы html код работал как html код.

И никто не поймёт, не зная, какой код нужно вывести и как он формируется.

Мой форум - https://webinfo.guru –Там я всегда на связи
L
На сайте с 10.02.2015
Offline
221
#4
we ask you escape all $-variables

искейпить нужно php переменные

html  по идее ж можно выводить без echo

Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#5
webinfo #:

И никто не поймёт, не зная, какой код нужно вывести и как он формируется.

К сожалению, рано еще позориться, но я обязательно его опубликую, как вы понимаете его даже в репозиторий не принимают, настолько он плох, и я это знаю, я ведь не программист, да и удивительно там нет ничего такого одна кнопка, да и этих echo не так уж и много, тем более информация, выводимая ими, выводится только в админ панели для администратора, хз что там можно сделать это даже не касается так сказать фронтендной части сайта.
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#6
livetv #:

искейпить нужно php переменные

html  по идее ж можно выводить без echo

Про искейпнуть переменные это я примерно понял (в смысле вывод из них где используется echo). Вывести без echo, это вы имеете ввиду, разорвав открывающие и закрывающие блоки <?php ?>, я просто никогда не думал, что это такая проблема выводить html код с помощью echo, я вам даже больше скажу не один учитель с ютуба, ни одна книжка, не рассказывает о таком тонком моменте, только пацаны с WordPress’а при проверке скромного плагина :).
totamon
На сайте с 12.05.2007
Offline
437
#7
Dmitriy_2014 #:
что это такая проблема выводить html код с помощью echo,

да причем тут html код?) они пишут про "переменные"... и выше обращали внимание.

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#8
totamon #:

да причем тут html код?) они пишут про "переменные"... и выше обращали внимание.

Да я понял про переменные, а что в переменных нельзя хранить элементы html кода и выводить их. Я понимаю что это связанно с псевдобезопасностью, и нужно обрамить их всех в эти супер безопасные функции а-ля esc_html(), но при этом html код выводиться как код, а не работает как html код и это создает проблемку для не программиста сделать так чтобы часть была в этих esc_html’ах, а часть просто работала как html код. Моя программа работает идеально :), а вот это уже начинается мазгоделание. Но ни че порешаем.
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#9

Спасибо за помощь, в общем я пофиксил все как смог, бюрократы WordPress съели.

Да если будете им что-то отправлять то вас могут ждать вот такие предъявы со стороны команды разработчиков и кураторов плагинов их репозитория:

## Tested Up To Value is Out of Date, Invalid, or Missing

The tested up to value in your plugin is not set to the current version of WordPress. This means your plugin will not show up in searches, as we require plugins to be compatible and documented as tested up to the most recent version of WordPress.

В целом при любых раскладах пишите в readme.txt что ваш плагин протестирован с последней текущей версией WordPress, если напишите хоть на пункт ниже будет отворот, поворот.

## Variables and options must be escaped when echo'd

Much related to sanitizing everything, all variables that are echoed need to be escaped when they're echoed, so it can't hijack users or (worse) admin screens. There are many esc_*() functions you can use to make sure you don't show people the wrong data, as well as some that will allow you to echo HTML safely.

Короче, почти весь вывод из подозрительных переменных или просто все если получится обрамить функцией esc_html, типо связано с возможными вопросами уязвимости а-ля XSS vulnerability, и попадании на вывод чет-то там кода html который типо как не желателен, я сам до конца не понял где это делать, а где нет, я заделал все что смог :)

## Generic function/class/define/namespace names

A good way to do this is with a prefix. For example, if your plugin is called "Easy Custom Post Types" then you could use names like these:

function ecpt_save_post()

define( ‘ECPT_LICENSE’, true );

class ECPT_Admin{}

namespace EasyCustomPostTypes;

Don't try to use two (2) or three (3) letter prefixes anymore. We host nearly 100-thousand plugins on WordPress.org alone. There are tens of thousands more outside our servers. Believe us, you’re going to run into conflicts.

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

Ну и да мой плагин приняли, как это не странно с моим не умением программирования и криворукостью, зовите меня теперь просто великий Архитектор и разработчик программного обеспечения Димитрий первый :-)

Извиняюсь за корявый текст, лень в Word’е нажимать Правописание и делать вид буд-то бы я знаю грамматику.
totamon
На сайте с 12.05.2007
Offline
437
#10
а ссылку на плагин?
12

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