ํ์ฌ ๋ณด์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ๋ ShiftSync ๋ฒ์ :
| Version | Supported |
|---|---|
| 1.0.x | โ |
| < 1.0 | โ |
ShiftSync์ ๋ณด์์ ์ ์งํ๋ ๋ฐ ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์ จ๋ค๋ฉด ์ฑ ์๊ฐ ์๊ฒ ๊ณต๊ฐํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๋์ ๋ค์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์:
- ์ด๋ฉ์ผ: security@shiftsync.com
- GitHub Security Advisory: Create a security advisory
๋ณด์ ์ทจ์ฝ์ ์ ๋ณด๊ณ ํ ๋ ๋ค์ ์ ๋ณด๋ฅผ ํฌํจํด์ฃผ์ธ์:
- ๐ ์ทจ์ฝ์ ์ ํ (์: SQL Injection, XSS, CSRF ๋ฑ)
- ๐ ์ํฅ์ ๋ฐ๋ ํ์ผ/๊ฒฝ๋ก
- ๐ ์ทจ์ฝ์ ์ฌํ ๋จ๊ณ
- ๐ฅ ์ ์ฌ์ ์ํฅ
- ๐ ๏ธ ๊ฐ๋ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ (์ ํ์ฌํญ)
- ๐ง ์ฐ๋ฝ์ฒ ์ ๋ณด
**์ทจ์ฝ์ ์ ํ**: SQL Injection
**์ํฅ์ ๋ฐ๋ ์ปดํฌ๋ํธ**:
- backend/lambda/schedule_management/handler.py
- Line 145-150
**์ฌํ ๋จ๊ณ**:
1. /users/{user_id}/schedules ์๋ํฌ์ธํธ์ ์ ๊ทผ
2. ๋ค์ ํ์ด๋ก๋ ์ ์ก: `{"date": "2024-01-01' OR '1'='1"}`
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ์คํ๋จ
**์ ์ฌ์ ์ํฅ**:
- ๋ฌด๋จ ๋ฐ์ดํฐ ์ ๊ทผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ณด ์ ์ถ
**์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ**:
- Prepared statements ์ฌ์ฉ
- ์
๋ ฅ ๊ฐ ๊ฒ์ฆ ๊ฐํ- ๋ณด๊ณ ์ ์ ์ ํ์ธ
- ์ด๊ธฐ ํ๊ฐ ์์
- ์ทจ์ฝ์ ์ฌํ ๋ฐ ๊ฒ์ฆ
- ์ฌ๊ฐ๋ ํ๊ฐ (Critical, High, Medium, Low)
- ์ํฅ ๋ฒ์ ๋ถ์
- Critical: 24-48์๊ฐ
- High: 1์ฃผ์ผ
- Medium: 2์ฃผ์ผ
- Low: ๋ค์ ์ ๊ธฐ ๋ฆด๋ฆฌ์ค
- ํจ์น ๋ฐฐํฌ ํ 30์ผ ๋ค ๊ณต๊ฐ
- ๋ณด๊ณ ์์ ํ์ํ์ฌ ๊ณต๊ฐ ์๊ธฐ ์กฐ์ ๊ฐ๋ฅ
- CVE ๋ฒํธ ํ ๋น (ํ์์)
๋ณด์ ์ทจ์ฝ์ ์ ์ฑ ์๊ฐ ์๊ฒ ๋ณด๊ณ ํด์ฃผ์ ๋ถ๋ค์ SECURITY_HALL_OF_FAME.md์ ๊ธฐ๋กํฉ๋๋ค (๋์ํ์ ๊ฒฝ์ฐ).
โ
Good: MyP@ssw0rd!2024#ShiftSync
โ Bad: password123
- AWS Cognito MFA ์ค์ ๊ถ์ฅ
- ์ธ์ฆ ์ฑ ์ฌ์ฉ (Google Authenticator, Authy ๋ฑ)
- ์ต์ 3๊ฐ์๋ง๋ค ๋ณ๊ฒฝ
- ๋ค๋ฅธ ์๋น์ค์ ๋์ผํ ๋น๋ฐ๋ฒํธ ์ฌ์ฉ ๊ธ์ง
- ๋น์ ์์ ์ธ ๋ก๊ทธ์ธ ์๋
- ์์์น ๋ชปํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ
- ์ด์ํ ์ด๋ฉ์ผ ์์
# โ ์ ๋ ์ปค๋ฐํ์ง ๋ง์ธ์
.env
.env.local
backend/.env
# โ
.gitignore์ ์ถ๊ฐ
echo ".env" >> .gitignore
echo "backend/.env" >> .gitignore# โ ํ๋์ฝ๋ฉ ๊ธ์ง
aws_access_key = "AKIAIOSFODNN7EXAMPLE"
# โ
ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ
aws_access_key = os.environ.get('AWS_ACCESS_KEY_ID')# โ ๋ฌธ์์ด ํฌ๋งทํ
์ฌ์ฉ ๊ธ์ง
query = f"SELECT * FROM users WHERE id = {user_id}"
# โ
Prepared statements ์ฌ์ฉ
query = "SELECT * FROM users WHERE id = %s"
cursor.execute(query, (user_id,))// โ dangerouslySetInnerHTML ์ฌ์ฉ ๊ธ์ง
<div dangerouslySetInnerHTML={{__html: userInput}} />
// โ
ํ
์คํธ๋ก ๋ ๋๋ง
<div>{userInput}</div># โ
ํ๋ก๋์
์์๋ ํน์ ๋๋ฉ์ธ๋ง ํ์ฉ
headers = {
'Access-Control-Allow-Origin': 'https://shiftsync.com',
'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE',
'Access-Control-Allow-Headers': 'Content-Type,Authorization'
}- โ AWS RDS ์ํธํ ํ์ฑํ
- โ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ์ํธํํ์ฌ ์ ์ฅ
- โ ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์ํ
- โ HTTPS/TLS ์ฌ์ฉ (CloudFront)
- โ API ์์ฒญ์ ์ธ์ฆ ํ ํฐ ํฌํจ
- โ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ POST body์ ํฌํจ
- โ ์ต์ํ์ ์ ๋ณด๋ง ์์ง
- โ ์ฌ์ฉ์ ๋์ ํ ์์ง
- โ ์ ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฆฌ
- npm audit - ํ๋ก ํธ์๋ ์์กด์ฑ ๊ฒ์ฌ
- Safety - Python ์์กด์ฑ ๊ฒ์ฌ
- AWS Security Hub - AWS ๋ฆฌ์์ค ๋ณด์ ๊ฒ์ฌ
- ์์กด์ฑ ์ ๋ฐ์ดํธ ํ์ธ
- ๋ณด์ ํจ์น ์ ์ฉ
- ์ก์ธ์ค ๋ก๊ทธ ๊ฒํ
- ๋ณด์ ๊ฐ์ฌ ์ํ
- ์นจํฌ ํ ์คํธ
- ๋ณด์ ์ ์ฑ ๊ฒํ
- ์ ์ฒด ๋ณด์ ํ๊ฐ
- ์ฌํด ๋ณต๊ตฌ ๊ณํ ํ ์คํธ
- ๋ณด์ ๊ต์ก ์ค์
๋ณด์ ๊ด๋ จ ๋ฌธ์:
- ๐ง Email: security@shiftsync.com
- ๐ PGP Key: [๊ณต๊ฐ ํค ๋งํฌ]
- โฐ ์๋ต ์๊ฐ: 24์๊ฐ ์ด๋ด
์ผ๋ฐ ๋ฌธ์:
- ๐ฌ GitHub Issues: [๋งํฌ]
- ๐ง Email: support@shiftsync.com
ShiftSync์ ๋ณด์์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ ์ฃผ์ ๋ชจ๋ ๋ณด์ ์ฐ๊ตฌ์๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ณด์์ ์ฐ๋ฆฌ ๋ชจ๋์ ์ฑ ์์ ๋๋ค ๐