当前位置:首页>python>Python应用|第三周接口安全测试

Python应用|第三周接口安全测试

  • 2026-09-02 19:10:54
Python应用|第三周接口安全测试

这份是第3周:测试 + 安全结合的实战代码,直接就能用在接口安全、合规检查、自查漏洞,非常贴合你工作场景。


Day15:接口未授权访问检测(最常用安全测试)

import requestsdefcheck_unauthorized(url_list):    result = []for url in url_list:try:## 不带 Cookie / Token 直接访问            res = requests.get(url, timeout=3)if res.status_code == 200and len(res.text) > 100:                result.append((url, "可能存在未授权访问"))except Exception as e:passreturn resultif __name__ == "__main__":    api_list = ["https://httpbin.org/get","https://httpbin.org/user-agent"    ]for url, msg in check_unauthorized(api_list):        print(url, msg)

Day16:接口越权测试(ID 遍历测试)

import requestsdeftest_id_permission(base_url, id_start, id_end):    vuln = []for uid in range(id_start, id_end + 1):        url = f"{base_url}?id={uid}"try:            res = requests.get(url, timeout=2)## 如果返回正常且含用户信息,可能越权if res.status_code == 200and ("username"in res.text or"data"in res.text):                vuln.append(uid)except:continuereturn vulnif __name__ == "__main__":## 示例:遍历用户ID    print("可能越权ID:", test_id_permission("https://httpbin.org/get", 1, 10))

Day17:配置/返回敏感信息检测(手机号、身份证、密码)

import reimport requestsdefcheck_sensitive_info(text):    patterns = {"手机号": r"1[3-9]\d{9}","身份证": r"\d{17}[\dXx]","密码明文": r"password=[^&]+|pass=\w+|pwd=\w+"    }    found = {}for name, pat in patterns.items():        res = re.findall(pat, text)if res:            found[name] = list(set(res))return founddefscan_api_sensitive(url):try:        res = requests.get(url, timeout=3)return check_sensitive_info(res.text)except:return {}if __name__ == "__main__":    print(scan_api_sensitive("https://httpbin.org/get"))

Day18:弱口令检测脚本(仅自用测试环境)

import requestsdefweak_pass_scan(url, username_list, password_list):    success = []for user in username_list:for pwd in password_list:try:                data = {"username": user, "password": pwd}                res = requests.post(url, json=data, timeout=2)if res.status_code == 200and ("success"in res.text or"token"in res.text):                    success.append((user, pwd))return success  ## 找到即停except:continuereturn successif __name__ == "__main__":## 仅自己测试环境使用!    res = weak_pass_scan("https://httpbin.org/post",        ["admin", "test"],        ["123456", "admin123", "password"]    )    print("弱口令结果:", res)

Day19:接口参数异常测试(空参、越界、非法字符)

import requestsdefabnormal_param_test(url):    test_cases = [None, "", "admin' OR 1=1--", "<script>alert(1)</script>","a"*1000, 0, -1, 99999999    ]    result = []for param in test_cases:try:            res = requests.get(url, params={"id": param}, timeout=2)if res.status_code in (200, 500):                result.append((param, res.status_code))except:continuereturn resultif __name__ == "__main__":    print(abnormal_param_test("https://httpbin.org/get"))

Day20:安全巡检一体化脚本(服务+端口+接口+文件)

import socketimport requestsimport hashlib## 综合巡检:端口是否开放 + 接口是否可访问 + 文件是否篡改defsecurity_check(host, ports, api_url, file_path, original_hash):    report = {}## 1. 端口检查    open_ports = []for p in ports:with socket.socket() as s:            s.settimeout(0.3)if s.connect_ex((host, p)) == 0:                open_ports.append(p)    report["开放端口"] = open_ports## 2. 接口存活try:        report["接口状态"] = requests.get(api_url, timeout=2).status_codeexcept:        report["接口状态"] = "不可访问"## 3. 文件完整性with open(file_path, "rb") as f:        h = hashlib.md5(f.read()).hexdigest()    report["文件被篡改"] = h != original_hashreturn reportif __name__ == "__main__":    report = security_check(        host="127.0.0.1",        ports=[22,80,443,8080],        api_url="https://httpbin.org/get",        file_path="test.txt",        original_hash="填写你之前保存的正确MD5"    )for k, v in report.items():        print(k, ":", v)

Day21:整理成你的第一个「接口安全测试工具」

结构可以这样放:

security_tools/├─ api_scan.py       ## 接口扫描├─ port_scan.py      ## 端口扫描├─ sensitive_check.py ## 敏感信息检测├─ weak_pass.py      ## 弱口令└─ main.py           ## 统一入口

main.py 示例:

from port_scan import scan_portsfrom sensitive_check import scan_api_sensitiveif __name__ == "__main__":    print("=== 接口安全巡检工具 ===")    print("开放端口:", scan_ports("127.0.0.1", [80, 8080, 443]))    print("敏感信息:", scan_api_sensitive("https://httpbin.org/get"))

第3周学完,你已经是会做接口安全测试的人了。 需要我继续发第4周:进阶优化 + 作品集整理的内容吗?这份是第3周:测试 + 安全结合的实战代码,直接就能用在接口安全、合规检查、自查漏洞,非常贴合你工作场景。


Day15:接口未授权访问检测(最常用安全测试)

import requestsdefcheck_unauthorized(url_list):    result = []for url in url_list:try:## 不带 Cookie / Token 直接访问            res = requests.get(url, timeout=3)if res.status_code == 200and len(res.text) > 100:                result.append((url, "可能存在未授权访问"))except Exception as e:passreturn resultif __name__ == "__main__":    api_list = ["https://httpbin.org/get","https://httpbin.org/user-agent"    ]for url, msg in check_unauthorized(api_list):        print(url, msg)

Day16:接口越权测试(ID 遍历测试)

import requestsdeftest_id_permission(base_url, id_start, id_end):    vuln = []for uid in range(id_start, id_end + 1):        url = f"{base_url}?id={uid}"try:            res = requests.get(url, timeout=2)## 如果返回正常且含用户信息,可能越权if res.status_code == 200and ("username"in res.text or"data"in res.text):                vuln.append(uid)except:continuereturn vulnif __name__ == "__main__":## 示例:遍历用户ID    print("可能越权ID:", test_id_permission("https://httpbin.org/get", 1, 10))

Day17:配置/返回敏感信息检测(手机号、身份证、密码)

import reimport requestsdefcheck_sensitive_info(text):    patterns = {"手机号": r"1[3-9]\d{9}","身份证": r"\d{17}[\dXx]","密码明文": r"password=[^&]+|pass=\w+|pwd=\w+"    }    found = {}for name, pat in patterns.items():        res = re.findall(pat, text)if res:            found[name] = list(set(res))return founddefscan_api_sensitive(url):try:        res = requests.get(url, timeout=3)return check_sensitive_info(res.text)except:return {}if __name__ == "__main__":    print(scan_api_sensitive("https://httpbin.org/get"))

Day18:弱口令检测脚本(仅自用测试环境)

import requestsdefweak_pass_scan(url, username_list, password_list):    success = []for user in username_list:for pwd in password_list:try:                data = {"username": user, "password": pwd}                res = requests.post(url, json=data, timeout=2)if res.status_code == 200and ("success"in res.text or"token"in res.text):                    success.append((user, pwd))return success  ## 找到即停except:continuereturn successif __name__ == "__main__":## 仅自己测试环境使用!    res = weak_pass_scan("https://httpbin.org/post",        ["admin", "test"],        ["123456", "admin123", "password"]    )    print("弱口令结果:", res)

Day19:接口参数异常测试(空参、越界、非法字符)

import requestsdefabnormal_param_test(url):    test_cases = [None, "", "admin' OR 1=1--", "<script>alert(1)</script>","a"*1000, 0, -1, 99999999    ]    result = []for param in test_cases:try:            res = requests.get(url, params={"id": param}, timeout=2)if res.status_code in (200, 500):                result.append((param, res.status_code))except:continuereturn resultif __name__ == "__main__":    print(abnormal_param_test("https://httpbin.org/get"))

Day20:安全巡检一体化脚本(服务+端口+接口+文件)

import socketimport requestsimport hashlib## 综合巡检:端口是否开放 + 接口是否可访问 + 文件是否篡改defsecurity_check(host, ports, api_url, file_path, original_hash):    report = {}## 1. 端口检查    open_ports = []for p in ports:with socket.socket() as s:            s.settimeout(0.3)if s.connect_ex((host, p)) == 0:                open_ports.append(p)    report["开放端口"] = open_ports## 2. 接口存活try:        report["接口状态"] = requests.get(api_url, timeout=2).status_codeexcept:        report["接口状态"] = "不可访问"## 3. 文件完整性with open(file_path, "rb") as f:        h = hashlib.md5(f.read()).hexdigest()    report["文件被篡改"] = h != original_hashreturn reportif __name__ == "__main__":    report = security_check(        host="127.0.0.1",        ports=[22,80,443,8080],        api_url="https://httpbin.org/get",        file_path="test.txt",        original_hash="填写你之前保存的正确MD5"    )for k, v in report.items():        print(k, ":", v)

Day21:整理成你的第一个「接口安全测试工具」

结构可以这样放:

security_tools/├─ api_scan.py       ## 接口扫描├─ port_scan.py      ## 端口扫描├─ sensitive_check.py ## 敏感信息检测├─ weak_pass.py      ## 弱口令└─ main.py           ## 统一入口

main.py 示例:

from port_scan import scan_portsfrom sensitive_check import scan_api_sensitiveif __name__ == "__main__":    print("=== 接口安全巡检工具 ===")    print("开放端口:", scan_ports("127.0.0.1", [80, 8080, 443]))    print("敏感信息:", scan_api_sensitive("https://httpbin.org/get"))

第3周学完,你已经是会做接口安全测试的人了。

最新文章

随机文章