一、OWASP Top 10

1.注入漏洞

(1)SQL 注入

  • 原理:通过用户输入注入恶意SQL代码
  • 示例:

    sql

    -- 恶意输入
    ' OR '1'='1
    -- 可能被注入的SQL
    SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''

(2)防护措施:

  • 使用参数化查询
  • 使用ORM框架
  • 实施最小权限原则

2.失效的访问控制

(1)常见问题:

  • 不安全的直接对象引用 (IDOR)
  • 权限提升
  • CORS配置错误

(2)示例:

http

GET /api/user/123 HTTP/1.1
Host: example.com
Authorization: Bearer <user_token_for_id_456>

(3)防护

  • 实现适当的访问控制检查
  • 使用随机ID而非自增ID
  • 实施最小权限原则

3.加密失效

(1)常见问题

  • 使用弱加密算法
  • 不安全的密钥管理
  • 使用HTTP明文传输敏感数据

(2)防护

python

# 使用安全的加密库
from cryptography.fernet import Fernet

# 生成密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)

# 加密
cipher_text = cipher_suite.encrypt(b"Secret message")

4.不安全的依赖项

(1)风险:

  • 使用含有已知漏洞的第三方库
  • 过时的依赖项

(2)检查工作:

bash

# 使用 pip-audit 检查Python依赖
pip install pip-audit
pip-audit

# 使用 OWASP Dependency-Check

5.安全配置错误

(1)常见问题:

  • 默认凭证未修改
  • 不必要的服务开启
  • 错误配置的CORS

(2)防护:

  • 定期进行安全审计
  • 自动化配置检查
  • 最小化安装原则

6.易受攻击和过时的组件

(1)管理策略:

  • 维护完整的软件物料清单(SBOM)
  • 定期更新依赖
  • 订阅安全公告

7.认证和授权失败

(1)防护措施:

  • 实施多因素认证
  • 密码策略
  • 账户锁定机制

(2)示例:

python

# 密码强度检查示例
import re

def is_strong_password(password):
    if len(password) < 12:
        return False
    if not re.search(r"[A-Z]", password):
        return False
    if not re.search(r"[a-z]", password):
        return False
    if not re.search(r"[0-9]", password):
        return False
    if not re.search(r"[!@#$%^&*(),.?\":{}|<>]", password):
        return False
    return True

8.软件和数据完整性故障

(1)防护:

  • 代码签名
  • 依赖验证
  • 完整性检查

9.安全日志和监控不足

python

import logging
from logging.handlers import RotatingFileHandler

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        RotatingFileHandler('app.log', maxBytes=1024*1024, backupCount=5),
        logging.StreamHandler()
    ]
)

logger = logging.getLogger(__name__)

# 记录安全事件
def log_security_event(user_id, event_type, details):
    logger.warning(
        "Security Event - User: %s, Type: %s, Details: %s",
        user_id, event_type, details
    )

10.服务器端请求伪造(SSRF)

(1)防护措施:

  • 实施白名单
  • 验证和清理用户输入
  • 使用网络分段
(2)

python

import requests
from urllib.parse import urlparse

def safe_fetch_url(url):
    # 验证URL
    parsed = urlparse(url)
    allowed_domains = ['api.trusted.com', 'cdn.trusted.com']

    if parsed.netloc not in allowed_domains:
       raise ValueError("访问被拒绝: 未授权的域名")

    response = requests.get(url, timeout=5)
    return response.content

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐