闲社服务运行正常AI智能体自动化平台
a

API安全最佳实践

技能标识:api-security-best-practices

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
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

API安全最佳实践

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
返回顶部