반응형
1. Key 및 Subkey의 정의
🔹 Key
- 특정한 리소스나 API를 사용할 수 있도록 하는 주요 식별자입니다.
- API 인증, 데이터 접근 권한 제어 등에 활용됩니다.
- 예시:
https://api.example.com/data?key=abcdef123456
- key=abcdef123456: API 접근을 위한 인증 키
🔹 Subkey
- Key의 하위 개념으로, 특정 기능을 제한하거나 세분화할 때 사용됩니다.
- 특정 사용자 그룹 또는 기능에 대한 접근을 제어하는 용도로 활용됩니다.
- 예시:
https://api.example.com/data?key=abcdef123456&subkey=xyz987
- subkey=xyz987: 특정 데이터 또는 기능에 대한 접근 제한 키
2. Key / Subkey 사용 예시
const apiUrl = "https://api.example.com/data?key=abcdef123456&subkey=xyz987";
fetch(apiUrl)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
📌 설명
- key=abcdef123456: API 전체 접근을 위한 키
- subkey=xyz987: 특정 기능 또는 특정 권한의 데이터를 가져오기 위한 키
3. 보안 취약점 - 주민등록번호 노출 사례
❌ 잘못된 구현 (보안 위험 코드)
다음은 no 파라미터가 특정 값을 포함할 때 주민등록번호가 평문으로 노출되는 보안 취약점을 가진 코드입니다.
const express = require("express");
const app = express();
app.get("/user", (req, res) => {
const { key, subkey, no } = req.query;
// 간단한 키 인증 (보안 취약)
if (key !== "secureKey") {
return res.status(403).json({ error: "Invalid key" });
}
// 주민등록번호가 평문으로 노출되는 취약한 코드
if (no) {
return res.json({
name: "홍길동",
id_number: "990101-1234567" // 🚨 주민등록번호 평문 노출 (보안 문제)
});
}
res.json({ message: "No data available" });
});
app.listen(3000, () => console.log("Server running on port 3000"));
4. 보안 강화 방법
보안 취약점해결 방법
Key 노출 방지 | API Key는 서버에서 관리하고, 클라이언트에 노출되지 않도록 해야 함 |
주민등록번호 평문 노출 | 개인 정보는 반드시 마스킹(990101-1******) 또는 암호화해야 함 |
인증 강화 | API 요청 시 키 외에도 추가적인 인증 절차(OAuth, JWT 등)를 도입 |
로그 기록 | API 요청 로그를 저장하고 비정상적인 요청 감지 |
✅ 보안 개선 코드 (마스킹 적용)
function maskIdNumber(idNumber) {
return idNumber.replace(/(\d{6})-(\d{7})/, "$1-*******");
}
app.get("/user", (req, res) => {
const { key, subkey, no } = req.query;
if (key !== "secureKey") {
return res.status(403).json({ error: "Invalid key" });
}
if (no) {
return res.json({
name: "홍길동",
id_number: maskIdNumber("990101-1234567") // ✅ 마스킹 처리 적용
});
}
res.json({ message: "No data available" });
});
5. 결론
- key는 주로 API 인증 및 접근을 위해 사용되며, subkey는 세부 기능을 제한하는 용도로 활용됩니다.
- 보안 취약점을 방지하기 위해 개인정보는 평문으로 반환하지 말고, 반드시 마스킹 또는 암호화 처리해야 합니다.
- API Key를 클라이언트에서 직접 사용하지 않도록 서버에서 보호하는 것이 중요합니다.
반응형
'IT > Network' 카테고리의 다른 글
AJAX (Asynchronous JavaScript and XML) 개념과 활용 설명 (0) | 2025.02.12 |
---|---|
cURL의 기원과 개념 (0) | 2025.02.12 |
macOS에서 cURL 명령어 사용 방법 (0) | 2025.02.12 |
Windows에서 cURL 명령어 사용 방법 (0) | 2025.02.12 |
[데이터 전송] 평문 전송 vs 암호화 전송 (0) | 2025.02.09 |
[JSON] 보안이 강화된 JSON Web Token (JWT) (0) | 2025.02.09 |
단말기 브라우저(Terminal Browser)란? (0) | 2025.02.09 |
[SSL] MAIL 사용시 SSL 서비스란? (0) | 2025.02.06 |
댓글