如你所知,API恶意调用是指未经授权或具有恶意意图,对应用程序接口(API)进行非正常访问或利用,以达成获取敏感数据、干扰服务运行、窃取资源或实施其他非法目的的行为。
对用户输入进行严格的校验和处理是防止 API 恶意调用的重要手段。以下是改进后的代码示例:
from flask import Flask, request, jsonify import sqlite3 app = Flask(__name__) @app.route('/user', methods=['GET']) def get_user(): user_id = request.args.get('id') # 校验 user_id 是否为整数 if not user_id.isdigit(): return jsonify({"error": "Invalid user ID"}), 400 conn = sqlite3.connect('example.db') cursor = conn.cursor() # 使用参数化查询 query = "SELECT * FROM users WHERE id=?" cursor.execute(query, (user_id,)) result = cursor.fetchone() conn.close() if result: return jsonify(result) else: return jsonify({"error": "User not found"}), 404 if __name__ == '__main__': app.run(debug=True)在这段代码中,首先对用户输入的 user_id 进行校验,确保它是一个整数。如果 user_id 不是整数,直接返回错误信息,阻止恶意调用。然后,使用参数化查询来执行 SQL 语句,确保用户输入的数据不会改变查询的逻辑。
除了编码层面的防御措施,后端的安全配置同样至关重要。一个常见的安全配置问题是跨域资源共享(Cross-Origin Resource Sharing,简称 CORS)。默认情况下,浏览器会限制前端代码从不同源(域名、协议或端口)加载资源。后端可以通过合理配置 Access-Control-Allow-Origin,允许某些特定的前端应用访问其 API,例如:
server { listen 80; server_name api.example.com; location /api/ { add_header 'Access-Control-Allow-Origin' 'https://app.example.com'; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE'; add_header 'Access-Control-Allow-Headers' 'X-Custom-Header'; add_header 'Access-Control-Allow-Credentials' 'true'; proxy_pass http://backend; } }通过合理配置 Access-Control-Allow-Origin,可以有效控制跨域请求的访问权限,在一定程度上阻止 API 被恶意调用,确保系统的安全性。