2024.01.02(화)
npm i http-status-codes
HTTP CODE | 401(UNAUTHORIZED) | 403(FORBIDDEN) |
---|---|---|
상황 | 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부됨. 서버가 사용자를 모름. | 서버가 해당 요청을 이해했지만, 권한이 없어 요청이 거부됨. 서버가 사용자를 알고 있음. |
예시 | 사용자가 로그인되지 않은 경우 | 사용자가 권한이 없는 요청을 하는 경우 |
💡403 경우 "해당 요청에 대한 자원이 존재함"을 내포하고 있기 때문에 자원의 존재 자체를 숨기고 싶은 경우에는 404(Not Found)를 사용하는 것이 적합할 수 있음.
The
node:crypto
module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.
const crypto = require('crypto')
require('dotenv').config();
/**
* @param {string} rawPassword
* @param {string} salt - base64 encoded
*/
const encryptPassword = (rawPassword, salt = null) => {
if (!salt) {
salt = crypto.randomBytes(parseInt(process.env.SALT_SIZE)).toString('base64');
}
const hashedPassword = crypto.pbkdf2Sync(
rawPassword, salt, parseInt(process.env.ITERATIONS), parseInt(process.env.KEY_LEN), process.env.DIGEST
).toString('base64');
return { salt, hashedPassword };
};
암호화 | 복호화 | 암호화 방식 | |
---|---|---|---|
단방향 | O | X | Hash |
양방향 | O | O | 대칭키(비공개키), 비대칭키(공개키) |
사용자의 비밀번호는 본인만이 알 수 있어야하고, 만약 비밀번호를 잃어버린 경우 복호화하는 과정에서 노출되기 때문에 대부분 재설정을 할 수 있도록 함 ⇒ 단방향 암호화 방식을 사용!
MD5
, SHA-1
, HAS-180
과 같이 이미 보안이 뚫린 해시 함수가 존재. 절대 사용하면 안됨.pbkdf
, scrypt
, bcrypt
🛡️ 안전한 parameter 값 설정하기
- salt의 길이는 32byte 이상 & 각 비밀번호마다 고유한 salt 사용하기
- iterations는 10000처럼 딱 떨어지는 수가 아닌 10376처럼 불규칙한 숫자 사용하기
git rebase -i HEAD~6
으로 기존 commit들을 모두 수정했다.pick
을 reword
로 바꿔주면 차례대로 수정 가능git push -f
로 강제로 원격 저장소에 push해서 덮어씌웠다.