我正在编写一个文件共享网站。它包含一个用于浏览服务器文件夹中文件的树。用户单击该文件夹,并向服务器发送一个请求GET,其中包含该文件夹路径的参数。服务器返回JSON此文件夹中文件结构的表示,并且用户“展开”此文件夹的树枝。如果用户选择的文件是存档,则服务器返回JSON存档中文件夹结构的表示。如果存档使用密码加密,服务器将返回错误并要求用户输入密码,以便向他显示存档的内容。
问题是:
如何使用
GET质询安全地传输密码?(我知道这是一个愚蠢的想法,但我希望你能提出另一种方法。这不适合PUT我使用)如果存档是嵌套的并且用户需要输入两个密码,如何保存上一个请求的密码?
# Исходное дерево:
+--- Root
| +--- Folder 1
| \--- File 1
# Пользователь нажал на "Folder 1"
+--- Root
| +--- Folder 1
| | +--- Folder 2
| | |--- Archive 1
| | \--- Folder 3
| \--- File 1
# Пользователь нажал на "Archive 1"
# Сервер попытался отобразить файлы "Archive 1"
# и оказалось, что он требует пароль
# Сервер возвращает "Forbidden" и перед
# пользователем появляется модальное окно с
# предложением ввести пароль. Пользователь
# вводит пароль и он отправляется (КАК?)
# вместе с запросом "GET".
+--- Root
| +--- Folder 1
| | +--- Folder 2
| | |--- Archive 1
| | | +--- Folder 4
| | | |--- Archive 2
| | | |--- File 2
| | | \--- Folder 5
| | \--- Folder 3
| \--- File 1
# Если сейчас пользователь нажмёт на
# "Archive 2", то у меня будут проблемы,
# потому что сервер обязан будет помнить
# пароль от первого архива и должен
# запросить пароль от второго архива.
# Каждый раз сервер начинает обход папок
# с корня "ROOT" как функция
# "scandir".
我应该将密码存储在服务器上吗?在会议中?强制用户立即输入密码列表?存储在js中?如何安全储存和运输?
REST 意识形态对这项任务有何看法?这是一个例外还是有一些好的解决方案?如果我在服务器上以明文形式存储密码,我应该多久清除一次用户会话?
没有人回答最好和最安全的方法是什么(问题中有很多字母),所以我将提出一个我最有可能实现的场景,并等待评论来编辑答案。
GET的请求。Forbidden,则服务器返回。JS。用户不JS生成公钥和私钥。AJAXPOST带有令牌的请求csrf,用户在请求正文中向服务器发送私钥和随机私钥。idid3 小时。JSGET的请求,但这次在请求参数中添加了存档密码,该密码使用公钥加密,之前使用私钥发送。idid并尝试使用它来解密存档的密码,然后尝试使用此密码解压存档。解压存档后,JSON存档中文件夹的生成视图将发送给用户,并且密码将从服务器的内存中销毁。但私钥仍保留在会话中,直到过期(3 小时)。