iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Security

從自建漏洞中學習 - 一起填坑吧系列 第 16

開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 1

  • 分享至 

  • xImage
  •  

開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 1

前言

在前十五天的挑戰中,我們簡單討論了一些資安相關的概念:

從 input、redirect、css 相關的攻擊到 Node.js 的安全實踐,我們看到了前端有可能會出現的攻擊,以及後端 Node.js 官方所介紹的安全實踐範例。

在接下來的挑戰中,我們將要來建立一個 Node.js 的 App,將會實現認證和授權相關的功能。

但在正式建立 App 之前,我們會先看一下大致上要做的事情,以及需要避免的設計以及其原因,就讓我們開始吧!

主要功能需要注意的事項

登入頁面

有關登入頁面的設計,我們會需要注意的部分就是 警示訊息 warning message & HTTP 回應的時間

詳細注意事項:

  1. 避免確切的用戶登入失敗的警示訊息
    當用戶登入失敗時,確定返回 "No such username or password",不要返回確切訊息。

    原因:
    因為假設在使用者輸入"沒有存在的用戶 username" 時,返回 "沒有這個 username",或許使用者體驗提升了,但有可能會讓攻擊者可以知道這個系統 "不存在" 哪些用戶,而排除那些攻擊名單,進而更容易鎖定攻擊目標。

  2. 確保 HTTP 回應時間無存在差異
    確保時間回應對於 username 沒有存在是不會因為 “沒有存在 username” 而有所差異的。

    原因:
    同上述第一點,有可能可以藉此讓攻擊者知道沒有存在某些用戶。

註冊頁面

有關註冊頁面,我們需要注意的是 密碼需要加密儲存 & 警示訊息 warning message

詳細注意事項:

  1. 密碼需要加密儲存
    在進行註冊的時候,SAVE 進 DB 的 user 密碼需要是被加密後的字串。

    原因:
    因為攻擊者若能連線進你的 DB,所有人的密碼若是明文就很有可能會被看光光,超級危險。

  2. 保有一定的註冊密碼長度限制
    通常我們在使用商業應用程式時,可以看到不同的應用程式都會有屬於他們的 password policy,
    但最基本就是會對密碼做一個 min length 的限制,避免密碼太過簡單。

  3. 避免確切的用戶註冊失敗的警示訊息
    當用戶註冊失敗時,避免告訴別人說 "username 已經被註冊"

    原因:
    因為假設在使用者輸入"已存在的用戶 username" 時,返回 "username 已經被註冊" 可能會讓攻擊者可以知道這個系統 "存在" 哪些用戶,進而更容易鎖定攻擊目標。

  4. 當有人嘗試將以註冊的 email 重新註冊時,寄送 password reset email 給 user,提醒他有人嘗試可能要攻擊他的帳號竊取資訊。

  5. 如果你的 username 並不是 email addresses,可以使用 CATCHA 來保護你的註冊頁面

備註:
此次的實作會視情況涵蓋 4、5 點,若時間有餘裕會增加其功能~


今日小心得

這次介紹了登入頁面、註冊頁面的注意事項,下次會介紹我們將會使用到的 JWT (用來做使用者驗證) ~
不得不說掌握進度真的有點困難,希望能順利產出程式碼 TAT


Reference


上一篇
Node.js 安全最佳實踐 - 2 (其他實踐篇)
下一篇
開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 2
系列文
從自建漏洞中學習 - 一起填坑吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言