- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 MEAN 堆栈应用程序,带有类似 API 的 REST。我有两种用户类型:用户和管理员。为了让用户登录并保持 session ,我像这样使用 jsonwebtoken jwt(简化):
const jwt = require("jsonwebtoken");
//example user, normally compare pass, find user in db and return user
let user = { username: user.username, userType: user.userType };
const token = jwt.sign({ data: user }, secret, {
expiresIn: 604800 // 1 week
});
为了保护我的快速路线不受我这样做:
在此示例中,它是一个“获取用户”路由,允许管理员获取有关任何给定用户的信息。 “普通”用户只被允许获取关于他/她自己的信息,为什么我将请求的用户名与从 token 解码的用户名进行比较。
let decodeToken = function (token) {
let decoded;
thử {
decoded = jwt.verify(token, secret);
} bắt (e) {
console.log(e);
}
return decoded;
}
// Get one user - admin full access, user self-access
router.get('/getUser/:username', (req, res, next) => {
let username = req.params.username;
if (req.headers.authorization) {
let token = req.headers.authorization.replace(/^Bearer\s/, '');
decoded = decodeToken(token);
if (decoded.data.userType == 'admin') {
//do something admin only
} else if (decoded.data.username == username) {
//do something user (self) only
} else{
res.json({ success: false, msg: 'not authorized' });
}
} khác {
res.json({ success: false, msg: 'You are not logged in.' });
}
})
所以我的问题是,这有多安全?有人可以操纵 session token 将用户名交换为其他人的用户名吗?甚至将用户类型从用户更改为管理员?
我的猜测是。只有当他们知道“ secret ”时,这就足够安全了吗? secret 毕竟就像存储在代码中的明文密码一样。什么是最佳实践?
câu trả lời hay nhất
the secret is after all just like a plain text password stored in the code.
没错。如果 secret
没有保密,那么攻击者可以伪造用户对象并使用该 secret 对其进行签名,而 verify
将无法区分两者。
将 secret 放入代码中可能会导致 secret 泄露。它可能会通过您的代码存储库泄漏,因为配置错误的服务器将 JS 源文件作为静态文件提供,或者因为攻击者找到了一种方法来利用 tiến trình con
调用来回显服务器上的源文件。您的用户的安全不应取决于没有人犯这些常见错误。
What is best practice?
使用 key 管理系统 (KMS) 而不是自行滚动或在代码中嵌入 secret 。 Wikipedia说
A key management system (KMS), also known as a cryptographic key management system (CKMS), is an integrated approach for generating, distributing and managing cryptographic keys for devices and applications.
通常,如何执行此操作取决于您的托管。例如,Google CloudVà AWS提供 key 管理服务。
https://www.npmjs.com/browse/keyword/kms可能会帮助您找到适合您堆栈的东西。
关于node.js - 网络安全。我是否正确保护了我的 REST api? (node.js 表达),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48281319/
Tôi có một câu lệnh if như sau if (not(fullpath.low().endswith(".pdf")) hay không (fullpath.low().endswith(tup
Tuy nhiên, trong PHP, can: chỉ xuất hiện nếu $foo là đúng. Trong Javascript, có thể.
XML có nhiều lợi ích. Nó vừa có thể đọc được bằng máy vừa có thể đọc được bằng con người, có định dạng chuẩn hóa và được sử dụng rộng rãi. Nó cũng có một số nhược điểm. Đó là cách dài dòng và không phải là cách hiệu quả để truyền lượng lớn dữ liệu. Một trong những khía cạnh hữu ích nhất của XML là ngôn ngữ lược đồ. Sử dụng chế độ này, bạn có thể
Vì tôi đã sử dụng SQL2000 được lâu nên tôi thực sự không hiểu sâu về các biểu thức bảng chung. Các câu trả lời tôi đưa ra ở đây (#4025380) và ở đây (#4018793) đi ngược lại quy trình vì chúng không sử dụng CTE. Tôi đánh giá cao họ vì đã cung cấp
Tôi có một ứng dụng: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { ném n
Mã của tôi là như sau. Có lẽ tôi đang sử dụng nó nhiều lần theo cách tương tự, tức là tôi đang quản lý các phiên và giao dịch theo cách này: List user= null;
Khi phát triển các ứng dụng web J2EE, tôi thường tổ chức cấu trúc gói của mình như sau com.jameselsey.. Bộ điều khiển - Bộ điều khiển/Hành động Tới đây Dịch vụ - Lớp dịch vụ giao dịch, được sử dụng bởi bộ điều khiển có tên Miền - Ứng dụng Lớp/đối tượng miền của tôi D
Điều này chỉ vì tò mò hơn bất cứ điều gì quan trọng, nhưng tôi chỉ đang thắc mắc về đoạn tài liệu sau đây từ memmove: Quá trình sao chép diễn ra như thể bộ đệm trung gian là chúng tôi
Nén đường dẫn liên quan đến việc chỉ định nút gốc là nút cha mới của mọi nút trên đường dẫn - điều này có thể hạ thấp thứ hạng của nút gốc và có thể hạ thứ hạng của tất cả các nút trên đường dẫn. Có cách nào để giải quyết vấn đề này? Có cần thiết phải giải quyết vấn đề này không? Hoặc có thể coi hạng là giới hạn trên của chiều cao của cây chứ không phải là chiều cao chính xác? Cảm ơn
Tôi có hai lớp, A và B. A là lớp cha của B, tôi có một hàm đưa con trỏ tới một lớp loại A, kiểm tra xem nó có thuộc loại B hay không và nếu có thì sẽ gọi một hàm khác đưa con trỏ tới một lớp loại B. Khi một hàm gọi một hàm khác, tôi
Có cách nào để làm cho valgrind sử dụng nhiều bộ xử lý không? Tôi đang thực hiện một số phân tích tắc nghẽn bằng cách sử dụng callgrind của valgrind và nhận thấy rằng việc sử dụng tài nguyên trong ứng dụng của tôi hoạt động khác với trong valgrind/callgrind
Giả sử chúng ta muốn sử dụng ReaderT[(a,b)] thay vì Maybe monad và sau đó chúng ta muốn tra cứu trong danh sách. Bây giờ, một cách đơn giản và không phổ biến là: khả năng đầu tiên là tìm a = ReaderT (looku
Có vẻ như có vấn đề với mã của tôi. Điều tôi cần nói là: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
Theo bài viết này (tháng 4 năm 2018), AKS có thể đặt Pod một cách thông minh trên các miền bị lỗi khi chạy trong nhóm khả dụng, nhưng chưa tính đến các miền cập nhật. Các miền cập nhật sẽ sớm được sử dụng để đưa nhóm vào AKS phải không? Câu trả lời hay nhất Khi bạn thiết lập cụm, nó sẽ tự động
khóa học | phần | gõ comart2 :bsit201 : lec comart2 :
Tôi đang phát triển SDK của riêng mình, SDK này dựa trên một số SDK của bên thứ 3. Ví dụ - OkHttp. Tôi có nên thêm OkHttp vào build.gradle của mình hay để người dùng SDK của tôi đưa nó vào? trong trường hợp này,
Khi Rust trở nên chín chắn hơn, sự quan tâm của tôi đối với nó bắt đầu nảy sinh. Tôi thích thực tế là nó hỗ trợ các kiểu dữ liệu đại số, đặc biệt là những kiểu dữ liệu phù hợp, nhưng bạn có ý tưởng nào cho các thành ngữ chức năng khác không? Ví dụ: có một tập hợp các hàm lọc/bản đồ/thu gọn tiêu chuẩn trong thư viện tiêu chuẩn và quan trọng hơn là bạn có thể
đóng cửa. Câu hỏi này không tuân thủ các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Sự cố này dường như không liên quan đến việc lập trình trong phạm vi được xác định trong trung tâm trợ giúp. . Đã đóng cửa 9 năm trước. Cải thiện
Tôi đã nghiên cứu các đối tượng trong PHP. Tất cả các ví dụ tôi đã thấy thậm chí còn sử dụng các hàm tạo đối tượng trên các đối tượng của chính chúng. PHP có buộc bạn phải làm điều này không? Nếu có thì tại sao? Ví dụ: firstname = $firstname;
...hơn mảng kết hợp? Mảng kết hợp có chiếm nhiều bộ nhớ hơn không? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- chỉ số là 11;
Tôi là một lập trình viên xuất sắc, rất giỏi!