@xuanan2001 JWT của bạn để trong cookie thì sẽ được browser tự động gửi lên server chứ không cần bạn lấy nó ra để thêm vào header nữa. Cái bạn cần lấy ra để thêm vào header là cái CSRF token cơ .
@minhtuan.nguy Dạ vâng ạ. Em gửi JWT bằng Header Authorization, mà muốn gửi như vậy thì phải để JWT có thể đọc được ở trong JavaScript để thêm vào request header chứ ạ? Đúng là kiểu này của em không thể bị CSRF được, vì nó không phải dùng Cookie. Em có thể để JWT ở trong localStorage để lấy ra cho vào Header Authorization, và chỉ cần chống XSS.
Anh bảo là phải cho JWT vào Cookie ấy ạ. Và anh bảo cũng phải để httpOnly. Việc này làm rồi thì không có cách nào cho JWT vào Header Authorization nữa. Việc gửi JWT đi là do Browser làm. Nhưng nếu anh làm như vậy thì chắc chắn sẽ phải chống CSRF, vì nó là Cookie. Mà đã chống CSRF theo kiểu của Serverless thì sẽ không thể để httpOnly được.
@xuanan2001
Vẫn cần phải lưu trong cookie để bảo vệ JWT token. Theo như mô tả của bạn thì hình như bạn gửi JWT Token đi bằng Header Authorization hoặc bằng cái nào đấy tương tự, việc sử dụng JWT là server sẽ decode và xác thực chính xác JWT đó mà server đã ký bằng key từ server, mà với kiểu này thì không bị tấn công CSRF
Trong bài em có nhắc đến việc em đang sử dụng serverless server ấy ạ. Serverless server thì sẽ không có session nào cả, và các request sẽ được identify bằng token JWT. Khác với Stateful server, là các server có lưu lại session và bên client cần lưu lại session_id để giữ session (Nếu em hiểu không nhầm là vậy, vì em không rành Stateful server).
Khi em phải dùng Cookie để lưu JWT, thì em phải implement "Double Submit Cookie" để chống CSRF. Mà nếu implement cái này thì sẽ không thể sử dụng được httpOnly để chống XSS, vì không có cách nào lấy CSRF token từ một cookie httpOnly để cho vào JavaScript rồi cho vào HTTP Request Body được ạ. Nên sử dụng httpOnly trong trường hợp Serverless là không thể.
@pinpolygons Thế thì chịu đấy. Có thể bạn bị rate limited, có thể server của họ bị quá tải. Mình gợi ý liên lạc support nếu có, theo mình thì API không phải trả tiền thì không đáng tin cậy lắm.
@quangkhai78py theo như mình được biết thì mỗi request query log của thằng bsc chỉ được tối đa 5000 blocks thôi. Nên bạn muốn không bị limit hãy query từ từ 5000 blocks 1 lần là được
THẢO LUẬN
@xuanan2001 JWT của bạn để trong cookie thì sẽ được browser tự động gửi lên server chứ không cần bạn lấy nó ra để thêm vào header nữa. Cái bạn cần lấy ra để thêm vào header là cái CSRF token cơ
.
@minhtuan.nguy Dạ vâng ạ. Em gửi JWT bằng Header
Authorization, mà muốn gửi như vậy thì phải để JWT có thể đọc được ở trong JavaScript để thêm vào request header chứ ạ? Đúng là kiểu này của em không thể bị CSRF được, vì nó không phải dùng Cookie. Em có thể để JWT ở tronglocalStorageđể lấy ra cho vào HeaderAuthorization, và chỉ cần chống XSS.Anh bảo là phải cho JWT vào Cookie ấy ạ. Và anh bảo cũng phải để
httpOnly. Việc này làm rồi thì không có cách nào cho JWT vào HeaderAuthorizationnữa. Việc gửi JWT đi là do Browser làm. Nhưng nếu anh làm như vậy thì chắc chắn sẽ phải chống CSRF, vì nó là Cookie. Mà đã chống CSRF theo kiểu của Serverless thì sẽ không thể đểhttpOnlyđược.Không thể nào có cách nào để JWT trong Cookie mà có
httpOnlyđược ấy ạ. Làm như thế không thể "Double Submit Cookie" được ạ. Anh có thể tham khảo Double Submit Cookie ở OWASP ạ: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie@xuanan2001 Vẫn cần phải lưu trong cookie để bảo vệ JWT token. Theo như mô tả của bạn thì hình như bạn gửi JWT Token đi bằng Header
Authorizationhoặc bằng cái nào đấy tương tự, việc sử dụng JWT là server sẽ decode và xác thực chính xác JWT đó mà server đã ký bằng key từ server, mà với kiểu này thì không bị tấn công CSRF@minhtuan.nguy Cảm ơn anh vì góp ý ạ!
Trong bài em có nhắc đến việc em đang sử dụng serverless server ấy ạ. Serverless server thì sẽ không có session nào cả, và các request sẽ được identify bằng token JWT. Khác với Stateful server, là các server có lưu lại session và bên client cần lưu lại session_id để giữ session (Nếu em hiểu không nhầm là vậy, vì em không rành Stateful server).
Khi em phải dùng Cookie để lưu JWT, thì em phải implement "Double Submit Cookie" để chống CSRF. Mà nếu implement cái này thì sẽ không thể sử dụng được
httpOnlyđể chống XSS, vì không có cách nào lấy CSRF token từ một cookiehttpOnlyđể cho vào JavaScript rồi cho vào HTTP Request Body được ạ. Nên sử dụnghttpOnlytrong trường hợp Serverless là không thể.Mong anh góp ý thêm ạ.
@Sudhakar you can try https://www.npmjs.com/package/swagger-spec-to-pdf or https://www.npmjs.com/package/html-pdf or https://www.npmjs.com/package/html-pdf-node
có cách nào crawl mà k cần đăg nhập k bác
Cám ơn bạn đã chia sẻ
Ai dốt toán chắc chả hiểu gì!
@ngo.quang.trung I am trying that one option, but I want in Nestjs code. How to download pdf file in nestjs.
Bài viết rất rõ ràng và chi tiết. Cảm ơn bạn nhiều
bài viết rất hay và dễ hiểu ạ
Using Browser Printing/Preview ? https://stackoverflow.com/a/41257222
@pinpolygons Thế thì chịu đấy. Có thể bạn bị rate limited, có thể server của họ bị quá tải. Mình gợi ý liên lạc support nếu có, theo mình thì API không phải trả tiền thì không đáng tin cậy lắm.
.bind làm gì thế
@ngo.quang.trung Hai, How to convert Swagger json file to pdf file in Nestjs.
sao code bi loi v
Bài viết rất hay. Cảm ơn bạn
@quangkhai78py cái này thì xin lỗi trước mình chưa đọc được trong docs của subgraph họ có tính năng này
@quangkhai78py theo như mình được biết thì mỗi request query log của thằng bsc chỉ được tối đa 5000 blocks thôi. Nên bạn muốn không bị limit hãy query từ từ 5000 blocks 1 lần là được
này bạn có thể thực hành nhiều để hiểu nè, không cần phải cố hiểu làm gì nha 😁. Nếu bạn khó hiểu chỗ nào có thể bình luận để mình giải thích rõ hơn