Использование атрибута HTML в исходном коде CMS

66
10

Я использую Prestashop для веб-сайта, на котором построены страницы содержимого:

Prestashop > Preferences > CMS > Source-Code.

Поэтому для каждой страницы CMS я использую исходный код, который является основным HTML.

ЭТА ПРОБЛЕМА

Я пытаюсь интегрировать виджет на страницу сайта CMS, теперь я тестировал виджет на простом html-документе, и он отлично работает.

Это код для HTML-страницы.

<div class="work-widget" data-key="1111plzwork111"></div>

Prestashop CMS> Исходный код выдает data-key="1111plzwork111", который, очевидно, нарушает виджет.

Итак, после сохранения исходного кода HTML выглядит так:

<div class="work-widget"></div>

Ожидаемое:

Может кто-то, пожалуйста, помогите мне разобраться в этом, я не знаю, что делать, чтобы заставить его работать. Поэтому, если я сохраню исходный код, HTML будет содержать атрибут data-key="1111plzwork111".

спросил(а) 2018-02-28T10:31:00+03:00 3 года, 7 месяцев назад
1
Решение
80

Вы должны отключить опцию Использовать библиотеку HTMLPurifier в меню "Настройки"> "Общие" в PrestaShop 1.6 или "Параметры магазина"> "Общие" в PrestaShop 1.7 Use HTMLPurifier Library option

ответил(а) 2018-02-28T11:46:00+03:00 3 года, 7 месяцев назад
79

@WebXY имеет фиксированный ответ, и он отлично работает. Но в случае, если кто-то не доволен отключением HTMLPurifier, поскольку он создает риски безопасности.

Риск безопасности:

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

Я использовал JavaScript для исправления проблемы, поэтому я добавил div с id в исходный код CMS.

Затем по определенному URL-адресу я нашел id и добавил innerHTML:


JS:

function dinePlan() {
"use strict";

var location = window.location.pathname;
var dinePlanId = document.getElementById("dineplan");

if (location !== null && dinePlanId !== null) {
if (location === "/restaurant"){
// console.log("found you");
dinePlanId.innerHTML = '<div class="work-widget" data-key="1111plzwork111"></div>';
}
}
}

$(document).ready(function(){
dinePlan();
}

Исходный код: (внутри CMS)

<div id="dineplan"></div>    

ответил(а) 2018-02-28T12:17:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема