如何检测网站采用的身份验证方式?Python请求认证异常排查
检测网站身份验证方式的方法
你遇到的问题根源在于:https://github.com/是公开可访问页面,不需要身份验证,所以无论你传入的Basic Auth信息是否有效,服务器都不会校验,直接返回200。要测试身份验证逻辑,得请求需要权限才能访问的页面/接口,比如GitHub的用户信息接口https://api.github.com/user。
以下是检测网站身份验证方式的具体步骤:
确定目标测试页面
先找到网站中需要登录才能访问的资源(比如用户中心、个人数据接口),这类资源才会触发身份验证校验。通过响应头判断验证类型
当服务器要求身份验证时,会返回401 Unauthorized状态码,同时响应头的WWW-Authenticate字段会明确标注支持的验证方式:- 若字段值为
Basic realm="xxx":说明采用HTTP Basic认证; - 若包含
Bearer:说明支持OAuth2 Bearer Token认证; - 若为
Digest realm="xxx":说明是HTTP Digest认证; - 若返回
302 Redirect跳转到登录页,或返回带登录表单的200页面:则大概率是表单认证(Form-based Authentication),这是大部分网站常用的方式。
- 若字段值为
实操测试示例
以GitHub的需认证接口为例,修改你的代码测试:import requests from requests.auth import HTTPBasicAuth username = 'fake_user' password = 'fake_pass' # 请求需要登录权限的用户信息接口 response = requests.get('https://api.github.com/user', auth=HTTPBasicAuth(username, password)) print('状态码:', response.status_code) print('验证方式头:', response.headers.get('WWW-Authenticate'))执行后会返回
401 Unauthorized,且WWW-Authenticate头会显示Basic realm="GitHub", Bearer realm="GitHub",说明GitHub同时支持Basic和Bearer两种认证方式。表单认证的检测与模拟
如果目标网站使用表单认证,需要:- 访问登录页面,查看HTML结构中的表单
action属性(即提交地址); - 识别表单必填字段(通常包含用户名、密码,还有CSRF令牌,比如
csrfmiddlewaretoken); - 用会话保持工具(如
requests.Session())提交表单数据,模拟登录流程:import requests from bs4 import BeautifulSoup # 需要先安装bs4:pip install beautifulsoup4 session = requests.Session() # 获取登录页面,提取CSRF令牌 login_page = session.get('https://example.com/login') soup = BeautifulSoup(login_page.text, 'html.parser') csrf_token = soup.find('input', {'name': 'csrfmiddlewaretoken'}).get('value') # 构造登录数据 login_data = { 'username': 'fake_user', 'password': 'fake_pass', 'csrfmiddlewaretoken': csrf_token } # 提交登录请求 response = session.post('https://example.com/login', data=login_data) # 验证登录结果(比如检查响应是否跳转到首页,或页面内容包含用户信息)
- 访问登录页面,查看HTML结构中的表单
内容的提问来源于stack exchange,提问作者Slartibartfast
相关产品推荐
相关产品推荐

