#!/usr/bin/env python3 """ 示例Python项目 - 包含一些常见的代码漏洞 """ import os import sys import hashlib import subprocess from urllib.request import urlopen class UserManager: def __init__(self): self.users = {} self.admin_password = "admin123" # 硬编码密码 def create_user(self, username, password): """创建用户 - 存在SQL注入风险""" # 模拟SQL查询 - 未使用参数化查询 query = f"INSERT INTO users (username, password) VALUES ('{username}', '{password}')" print(f"执行查询: {query}") # 存储明文密码 self.users[username] = password return True def authenticate(self, username, password): """用户认证""" if username in self.users: # 明文密码比较 return self.users[username] == password return False def hash_password(self, password): """密码哈希 - 使用弱哈希算法""" # 使用MD5 - 已被认为不安全 return hashlib.md5(password.encode()).hexdigest() def read_file(filename): """读取文件 - 未处理异常""" # 未检查文件是否存在 with open(filename, 'r') as f: return f.read() def download_file(url): """下载文件 - 存在安全风险""" # 未验证URL格式 response = urlopen(url) return response.read() def execute_command(cmd): """执行系统命令 - 存在命令注入风险""" # 直接执行用户输入的命令 result = subprocess.run(cmd, shell=True, capture_output=True, text=True) return result.stdout def process_user_input(data): """处理用户输入 - 未进行输入验证""" # 未验证输入长度和内容 if len(data) > 1000: # 简单的长度检查 return "输入过长" # 未过滤危险字符 return data.replace('', '') def calculate_total(items): """计算总数 - 存在除零风险""" total = 0 for item in items: # 未检查除零 total += item['price'] / item['quantity'] return total def main(): """主函数""" print("代码漏洞检测系统示例") # 硬编码的敏感信息 api_key = "sk-1234567890abcdef" database_url = "mysql://user:password@localhost/db" # 未使用HTTPS external_url = "http://api.example.com/data" # 创建用户管理器 user_mgr = UserManager() # 模拟用户操作 username = input("请输入用户名: ") password = input("请输入密码: ") # 未验证输入 if user_mgr.create_user(username, password): print("用户创建成功") # 尝试读取文件 try: content = read_file("config.txt") print("配置文件内容:", content) except: print("文件读取失败") # 执行命令 command = input("请输入要执行的命令: ") output = execute_command(command) print("命令输出:", output) if __name__ == "__main__": main()