返回顶部
a

api-security-best-practicesAPI安全最佳实践

Implement secure API design patterns including authentication, authorization, input validation, rate limiting, and protection against common API vulnerabilities

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
816
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

api-security-best-practices

API 보안 모범 사례 🐧

개요

인증, 권한 부여, 입력 검증, 속도 제한 및 일반적인 취약점에 대한 보호를 구현하여 개발자가 안전한 API를 구축할 수 있도록 안내합니다. 이 스킬은 REST, GraphQL 및 WebSocket API에 대한 보안 패턴을 다룹니다.

이 스킬을 사용해야 할 때

  • - 새로운 API 엔드포인트를 설계할 때
  • 기존 API를 보호할 때
  • 인증 및 권한 부여를 구현할 때
  • API 공격(인젝션, DDoS 등)으로부터 보호할 때
  • API 보안 검토를 수행할 때
  • 보안 감사를 준비할 때
  • 속도 제한 및 스로틀링을 구현할 때
  • API에서 민감한 데이터를 처리할 때

작동 방식

1단계: 인증 및 권한 부여

안전한 인증 구현을 도와드립니다:

  • - 인증 방법 선택 (JWT, OAuth 2.0, API 키)
  • 토큰 기반 인증 구현
  • 역할 기반 접근 제어(RBAC) 설정
  • 안전한 세션 관리
  • 다중 인증(MFA) 구현

2단계: 입력 검증 및 정화

인젝션 공격으로부터 보호:

  • - 모든 입력 데이터 검증
  • 사용자 입력 정화
  • 매개변수화된 쿼리 사용
  • 요청 스키마 검증 구현
  • SQL 인젝션, XSS 및 명령 인젝션 방지

3단계: 속도 제한 및 스로틀링

남용 및 DDoS 공격 방지:

  • - 사용자/IP별 속도 제한 구현
  • API 스로틀링 설정
  • 요청 할당량 구성
  • 속도 제한 오류 우아하게 처리
  • 의심스러운 활동 모니터링

4단계: 데이터 보호

민감한 데이터 보호:

  • - 전송 중 데이터 암호화 (HTTPS/TLS)
  • 저장된 민감한 데이터 암호화
  • 적절한 오류 처리 구현 (데이터 유출 없음)
  • 오류 메시지 정화
  • 보안 헤더 사용

5단계: API 보안 테스트

보안 구현 확인:

  • - 인증 및 권한 부여 테스트
  • 침투 테스트 수행
  • 일반적인 취약점 확인 (OWASP API Top 10)
  • 입력 처리 검증
  • 속도 제한 테스트

예제

예제 1: JWT 인증 구현

markdown

안전한 JWT 인증 구현

인증 흐름

  1. 1. 사용자가 자격 증명으로 로그인
  2. 서버가 자격 증명 검증
  3. 서버가 JWT 토큰 생성
  4. 클라이언트가 토큰을 안전하게 저장
  5. 클라이언트가 각 요청과 함께 토큰 전송
  6. 서버가 토큰 검증

구현

1. 안전한 JWT 토큰 생성

\\\javascript
// auth.js
const jwt = require(jsonwebtoken);
const bcrypt = require(bcrypt);

// 로그인 엔드포인트
app.post(/api/auth/login, async (req, res) => {
try {
const { email, password } = req.body;

// 입력 검증
if (!email || !password) {
return res.status(400).json({
error: 이메일과 비밀번호가 필요합니다
});
}

// 사용자 찾기
const user = await db.user.findUnique({
where: { email }
});

if (!user) {
// 사용자 존재 여부를 노출하지 않음
return res.status(401).json({
error: 잘못된 자격 증명입니다
});
}

// 비밀번호 확인
const validPassword = await bcrypt.compare(
password,
user.passwordHash
);

if (!validPassword) {
return res.status(401).json({
error: 잘못된 자격 증명입니다
});
}

// JWT 토큰 생성
const token = jwt.sign(
{
userId: user.id,
email: user.email,
role: user.role
},
process.env.JWT_SECRET,
{
expiresIn: 1h,
issuer: your-app,
audience: your-app-users
}
);

// 리프레시 토큰 생성
const refreshToken = jwt.sign(
{ userId: user.id },
process.env.JWTREFRESHSECRET,
{ expiresIn: 7d }
);

// 데이터베이스에 리프레시 토큰 저장
await db.refreshToken.create({
data: {
token: refreshToken,
userId: user.id,
expiresAt: new Date(Date.now() + 7 24 60 60 1000)
}
});

res.json({
token,
refreshToken,
expiresIn: 3600
});

} catch (error) {
console.error(로그인 오류:, error);
res.status(500).json({
error: 로그인 중 오류가 발생했습니다
});
}
});
\\\

2. JWT 토큰 검증 (미들웨어)

\\\javascript
// middleware/auth.js
const jwt = require(jsonwebtoken);

function authenticateToken(req, res, next) {
// 헤더에서 토큰 가져오기
const authHeader = req.headers[authorization];
const token = authHeader && authHeader.split( )[1]; // Bearer TOKEN

if (!token) {
return res.status(401).json({
error: 액세스 토큰이 필요합니다
});
}

// 토큰 검증
jwt.verify(
token,
process.env.JWT_SECRET,
{
issuer: your-app,
audience: your-app-users
},
(err, user) => {
if (err) {
if (err.name === TokenExpiredError) {
return res.status(401).json({
error: 토큰이 만료되었습니다
});
}
return res.status(403).json({
error: 유효하지 않은 토큰입니다
});
}

// 요청에 사용자 정보 첨부
req.user = user;
next();
}
);
}

module.exports = { authenticateToken };
\\\

3. 라우트 보호

\\\javascript
const { authenticateToken } = require(./middleware/auth);

// 보호된 라우트
app.get(/api/user/profile, authenticateToken, async (req, res) => {
try {
const user = await db.user.findUnique({
where: { id: req.user.userId },
select: {
id: true,
email: true,
name: true,
// passwordHash는 반환하지 않음
}
});

res.json(user);
} catch (error) {
res.status(500).json({ error: 서버 오류 });
}
});
\\\

4. 토큰 갱신 구현

\\\javascript
app.post(/api/auth/refresh, async (req, res) => {
const { refreshToken } = req.body;

if (!refreshToken) {
return res.status(401).json({
error: 리프레시 토큰이 필요합니다
});
}

try {
// 리프레시 토큰 검증
const decoded = jwt.verify(
refreshToken,
process.env.JWTREFRESHSECRET
);

// 데이터베이스에 리프레시 토큰이 있는지 확인
const storedToken = await db.refreshToken.findFirst({
where: {
token: refreshToken,
userId: decoded.userId,
expiresAt: { gt: new Date() }
}
});

if (!storedToken) {
return res.status(403).json({
error: 유효하지 않은 리프레시 토큰입니다
});
}

// 새 액세스 토큰 생성
const user = await db.user.findUnique({
where: { id: decoded.userId }
});

const newToken = jwt.sign(
{

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 api-security-best-practices-1776419943 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 api-security-best-practices-1776419943 技能

通过命令行安装

skillhub install api-security-best-practices-1776419943

下载

⬇ 下载 api-security-best-practices v1.0.0(免费)

文件大小: 7.9 KB | 发布时间: 2026-4-17 19:58

v1.0.0 最新 2026-4-17 19:58
Initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部