BEAUTIFIER.IO (ex. jsbeautifier.org)
Украшает, распаковывает или деобфускирует JavaScript и HTML, делает JSON/JSONP читабельным и т. д.
Мультипарадигменный язык программирования. Поддерживает объектно-ориентированный, императивный и функциональный стили. Является реализацией стандарта ECMAScript (стандарт ECMA-262).
Украшает, распаковывает или деобфускирует JavaScript и HTML, делает JSON/JSONP читабельным и т. д.
В настоящее время почти все веб-страницы используют JavaScript, скриптовый язык программирования, который работает на веб-браузере посетителя. Это делает веб-страницы более функциональными, а если по каким-либо причинам JavaScript отключен, содержание или функциональность веб-страницы может быть ограничена или вовсе не возможна. Здесь вы можете найти инструкции о том, как включить (активировать) JavaScript в пяти наиболее распространенных веб-браузерах.
Ссылка на инструкцию: https://www.enable-javascript.com/ru/
Достаточно написать следующее условие:
if (typeof arr !== 'undefined' && arr.length > 0) {
// Массив объявлен и имеет хотя бы один элемент
}
Однажды меня спросили:
Как сделать так, что бы пароли коннекта к базам данных, расположенные в конфигурационном файле, хранились в зашифрованном или в закрытом виде, но мы могли бы ими воспользоваться в самом приложении?
Привожу пару мыслей на этот счет.
Необходимо выставить правильные настройки прав доступа к файлу на сервере так, чтобы его не мог читать любой пользователь системы и отдельный пользователь для одной конкретной задачи, т.к. контекст подразумевает не пароли пользователей сервиса, а хранения пароля к базе данных (БД).
Думаю, что шифровать пароль к БД довольно странная идея. Даже если заменить пароль на хэш и подключение будет возможно с передачей не пароля, а хэша, то если кто-то получит доступ к серверу и увидит файл с этим хэшем, он точно также использует его и подключится к базе. Шифрование пароля в такой ситуации ничем не поможет.
Плюсы:
+ В конфигурационный файл удобно вносить изменения.
Минусы:
— У пользователя root в любом случае есть все права на конфигурационный файл.
На отдельном сервере лежит запечатанный контейнер к которому можно получить доступ, предварительно распечатав его и авторизовавшись при помощи ключа.
Плюсы:
+- Так таковых плюсов не увидел, т.к. этот продукт решает другую задачу — передачу секретов по незащищённым каналам в запечатанном виде, хранение всех паролей в одном месте и гибкое разделение прав доступа к паролям через различные способы авторизации.
Минусы:
— Если файл зашифрован, но рядом лежит ключ для расшифровки, то пароль будет все равно извлечен.
Тот же JS, но в неудобочитаемом виде.
Плюсы:
+- Не является шифровальщиком, но позволяет скрыть какие-то алгоритмы и логику работы программы.
Минусы:
— В обфусцированном файле при детальном просмотре пароли видны в явном виде.
Сервер, который не смотрит во внешнюю сеть, подключается по SSH и выполняет операции по запуску на боевом сервере и после запуска удаляет не значимые файлы.
Плюсы:
+ Пароль не хранится на боевом сервере.
Минусы:
— Нужен какой-то скрипт, который будет производить запуск/перезапуск приложения и подчищать «хвосты».
Байт-код (англ. bytecode) — стандартное промежуточное представление, в которое может быть переведена компьютерная программа автоматическими средствами. По сравнению с исходным кодом, удобным для создания и чтения человеком, байт-код — это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и другие конструкции. С технической точки зрения байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода.
Плюсы:
+ Нет ключа дешифровки.
Минусы:
— При изменении кода в файле, нужно каждый раз проделывать операцию по преобразованию файла в другой вид или придумать какое-то решение или какой-то скрипт который будет это делать автоматически.
Объявлен RegExp regex = /asd/
Я храню его как ключ в моей системе хранения ключей.
Допустим, я попытаюсь преобразовать str = String(regex)
тогда результатом будет "/asd/"
.
Теперь мне нужно преобразовать строку обратно в RegEx.
Я выполняю: RegExp(str)
и вижу /\/asd\//
это не то, что я хочу. Это не то же самое, что /asd/
Можно ли просто удалить первый и последний символы из строки перед преобразованием ее в регулярное выражение? Это дало бы мне желаемый результат в данной ситуации, но не обязательно сработало бы, если бы в RegExp были такие модификаторы, как /i
or /g
Есть лучший способ сделать это?
Если вам не нужно хранить модификаторы, вы можете использовать Regexp#source
чтобы получить строковое значение, а затем преобразовать обратно с помощью RegExp
конструктора.
var regex = /abc/g;
var str = regex.source; // "abc"
var restoreRegex = new RegExp(str, "g");
Если вам действительно нужно сохранить модификаторы, используйте регулярное выражение для анализа регулярного выражения:
var regex = /abc/g;
var str = regex.toString(); // "/abc/g"
var parts = /\/(.*)\/(.*)/.exec(str);
var restoredRegex = new RegExp(parts[1], parts[2]);
Это будет работать, даже если в шаблоне есть /
в нем, потому чтоe .*
жаден и будет продвигаться до последнего /
в строке.
Если производительность вызывает беспокойство, используйте обычные манипуляции со строками, используя String#lastIndexOf
:
var regex = /abc/g;
var str = regex.toString(); // "/abc/g"
var lastSlash = str.lastIndexOf("/");
var restoredRegex = new RegExp(str.slice(1, lastSlash), str.slice(lastSlash + 1));
Необходимо установить FTP коннект к Windows Server при помощи платформы Node.js, вырезать определенную папку (вместе с находящимися в ней папками и файлами) и вставить в определенную директорию на сервере под управлением Linux.
Можно ли реализовать описанную задачу? Если «Да», то какие NPM-пакеты использовать и/или какой код программы подойдет для решения задачи?
Если ходить по обычному FTP, то инструкция получилась такая:
При помощи NPM-пакета basic-ftp, получить содержимое каталога:
const ftp = require('basic-ftp');
ftp_connect()
async function ftp_connect() {
const client = new ftp.Client();
client.ftp.verbose = true;
try {
await client.access({
host: 'host',
port: '21',
user: 'domain\\username',
password: 'password',
secure: false
})
console.log(await client.list())
}
catch(err) {
console.log(err)
}
client.close()
}
Имеется массив JavaScript, который выглядит следующим образом:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Какой подход можно применить для разбиения массива на множество меньших массивов, скажем, с 4 элементами максимум?
Метод array.slice может извлечь фрагмент из начала, середины или конца массива для любых целей, без каких-либо изменений исходного массива. Например:
function array_chunks(array, chunk_size) {
let a = Array(Math.ceil(array.length / chunk_size)).fill();
a = a.map((_, index) => index * chunk_size)
return a.map(begin => array.slice(begin, begin + chunk_size));
}
const a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(array_chunks(a, 4)) // [[1, 2, 3, 4], [5, 6, 7, 8], [9]]