JavaScript: создаем и позволяем скачать csv файл

Задача: из некого массива данных создать файл и предложить его к закачке пользователем, без участия серверной части.

Решение: Для создания файла воспользуемся функцией Blob, которая позволяет оперировать с бинарными данными. Далее создадим в DOM элемент <a>, поместим в href бинарные данные и сэмулируем нажатие на ссылку. Примерно так:

  //собираем csv файл
                      csv="OKPU;P1;P2;\n";
                      data.result.forEach(function(entry) {
                        csv=csv+entry.okpu+";"+entry.P1+";"+entry.P2+"\n";  
                      });
                        let a = document.createElement("a");
                        let file = new Blob([csv], {type: 'application/csv'});
                        a.href = URL.createObjectURL(file);
                        a.download = "sender_okpu_data.csv";
                        a.click();

JavaScript: удаление html тэгов из стороки

Задача: удалить из переменной все тэги вида <тэг>бла-бла</тэг>

Решение: воспользуемся регуляркой

txt="<a>Ссылка</a> А тут всё хорошо";
txt=txt.replace(/(<([^>]+)>)/ig, "");
console.log(txt)

Выведет в консоль только «А тут всё хорошо»

Переход к следующему input полю при нажатии кнопки Enter

Задача: есть таблица, в каждой ячейке которой находится поле input. Необходимо чтобы после ввода данных в поле и нажатии Enter проиходил переход на следующую ячейку

Решение:

 $('body').on('keydown', 'input, select', function(e) {        
            if (e.key === "Enter") {
                var self = $(this), form = self.parents('table:eq(0)'), focusable, next;
                focusable = form.find('input,textarea').filter(':visible');
                next = focusable.eq(focusable.index(this)+1);
                if (typeof next!=undefined){
                    if (typeof next[0]!=undefined){
                        if (next[0].disabled==true){
                            next = focusable.eq(focusable.index(this)+3);    
                        };
                        if (next.length) next.focus();
                    };
                };
                return false;
            }
    });    

Bitrix: уязвимость CGI Generic HTML Injections

Уязвимость актуальна для версии v21.9 и ниже. Пока нет информации что исправлена!

Эксплуатация: при переходе по специально сформированной ссылке на сайт с битриксом, выводится произвольное содержимое и выполняется произвольный js код.

Проверка вшивости сайта:

https://ваш_сайт/catalog/?q=<"dqzsbr%20>

Исправление: самый простой способ, до исправления от битрикса — поправить .httaccess, добавив строчки:

   
    RewriteCond %{QUERY_STRING} "
    RewriteRule ^.*$ - [F]
    RewriteCond %{QUERY_STRING} %22
    RewriteRule ^.*$ - [F]
    RewriteCond %{QUERY_STRING} %3C
    RewriteRule ^.*$ - [F]
    #RewriteCond %{QUERY_STRING} \<
    RewriteCond %{QUERY_STRING} %27
    RewriteRule ^.*$ - [F]
    RewriteCond %{QUERY_STRING} %3E
    RewriteRule ^.*$ - [F]


Особенности установки helpdesk-z

К сожалению в руководстве по установке, процесс описан очень коротенько, и очень часто установка сводится к выводу сообщения:

Whoops! We seem to have hit a snag. Please try again later…

Чтобы улучшить информативность фреймворка, что же ему таки не хватает, можно временно добавить в index.php строчку:

define('ENVIRONMENT', 'testing');

Но! В этом случае после успешного прохождения всех шагов инсталляции, фремворк будет пытаться проходить тесты и писать результаты в SQLite3, что нам не нужно. Потому не забудьте эту строчку удалить.

Для локализации, достаточно скачать необходимый язык из https://github.com/helpdesk-z/translations, и в настройках поменять локаль на нужную

1 12 13 14 15 16 56