Для этого вы можете использовать модуль xlsx-populate , например:
const XlsxPopulate = require('xlsx-populate');
XlsxPopulate.fromBlankAsync().then(workbook => {
workbook.sheet("Sheet1").cell("A1").value("Some sample text");
return workbook.toFileAsync("./test.xlsx", { password: "$secret_password" });
});
В результате в рабочей книге пользователю потребуется ввести правильный пароль, если он хочет получить доступ это.
KISS - просто используйте сессии так, чтобы Вы использовали идентификатор, который уже автоматически создается языком сценариев серверной стороны по Вашему выбору. Это достаточно трудно предположить. Затем если это украдено, сохраните IP-адрес и агент пользователя посетителя на сессии (удостоверяющийся никогда не производить это) и только считайте сессию допустимой, только если уже сохраненный IP-адрес и соответствие агента пользователя то, что найдено для удаленного клиента.
В этом сценарии взломщик должен был бы сделать следующие три вещи:
Это также помогает удостовериться, что взломщик уже не знает все вещи, которые он должен был бы сделать для корректного принятия сессии жертвы. IE: Они могут предположить просто, что cookie необходим, и затем перестали работать... и имеют для выяснения всего остального посредством очень длинного метода проб и ошибок. Таким образом Вы получаете безопасность через мрак и через трудность, в зависимости от навыка взломщика и его имеющихся знаний системы.
Поместите крышку на банку cookie.
Шутки в стороне, наилучший вариант был уже указан - делают cookie неясным идентификатором и связывают его с поиском IP-адреса на стороне сервера. Так как Вы отредактировали, чтобы сказать, что Вы не можете связать его с IP-адресом, который оставляет неясную идентификационную часть. Ваши опции ограничены с cookie - минута, Вы помещаете что-то в клиент, это становится риском.
Bernd - проблема с чем-либо сделанным по стандартному HTTP состоит в том, что это - простой текст; любой может фальсифицировать что-либо. IP-спуфинг немного более сложен, чтобы сделать, чем просто кража cookie, таким образом связывая с IP имеет тенденцию быть тем, что делают люди. Как Вы сказал, который не работает очень хорошо с очень динамическими средами.
Единственным главным образом безопасным путем я могу думать, должен использовать HTTPS, чтобы поместить и проверить "постоянный" cookie и затем поместить (в ту же сессию HTTPS) недолгие сеансовые куки. Остальная часть коммуникации может быть сделана по регулярному HTTP, с помощью сеансовых куки для аутентификации.
Тем путем меньше ресурсов используется в поддержке шифрования (просто квитирование), постоянный cookie не выставляется - это только передается при шифровании - и кража сеансовых куки открывается только до ограниченного риска, так как тот cookie быстро истечет.
Все, что быть сказанным - не позволяет пользователям нажать "remember me" на сайт, который содержит действительно уязвимые данные! Вот почему Банки не делают этого..
Надеюсь, это поможет.
О хранении сложных идентификаторов cookie и связанного дюйм/с в базе данных - Вы не должны действительно делать этого. Если у Вас есть секретный ключ K, достаточно зашифровать IP пользователя с Вашим K и поместить результат {IP} K как cookie. Пока Ваш ключ безопасен (и crypto не был поврежден - но если это происходит, у нас есть большие проблемы), это безопасно.
Сохраните cookie, который является неясным идентификатором в Вашу базу данных локального сервера. Сделайте серверную сторону поиск DB на основе идентификатора, предоставленного в cookie. Обязательно сделайте идентификатор достаточно сложным, что он не может быть легко предположен. Отобразите идентификатор на IP-адрес пользователя. Если их изменения IP, то вынудите их войти в систему снова, и создать новый идентификатор.
На втором чтении это кажется на желание высокого уровня безопасности связанными руками. У пользователя должен быть выбор остаться, вошел в систему, и таким образом увеличьте его риск. Можно реализовать всю безопасность в мире с точки зрения приложения и сервера, но если пользователь забудет их ноутбук относительно таблицы в Tim Horton (канадский Starbucks), то ни один из него не принесет Вам пользы.
Оставьте выбор до пользователя относительно того, остаются ли они, вошел в систему, и дайте им предупреждение об их находящейся в опасности информации.
Bernd - Вы говорите, что соединение IP-адреса к cookie не является опцией, я предполагаю, что это - b/c, пользователь мог быть соединен через DHCP и таким образом мог войти под другим IP каждый раз. Вы рассмотрели связь cookie к названию хоста DNS? Вы могли зашифровать cookie с помощью закрытого ключа и сохранить его на поле пользователя. Затем каждый раз, когда они входят, проверьте cookie, не зашифруйте его и затем проверьте текущее название хоста DNS пользователя по тому в cookie. Если это соответствует, Вы позволяете им войти. В противном случае Вы не позволяете автовход в систему.
К вашему сведению - в ASP.NET, для получения названия хоста DNS поля пользователя, просто взгляд на
Page.Request.UserHostName