全部学科
Python全栈
python
NodeJS全栈
nodejs

安全编程专项测试

20 题 40 分钟 难度:★★★

考察知识点

  • 输入验证:数据校验、类型检查、边界验证
  • 注入防护:SQL注入、命令注入、XSS防护
  • 敏感数据处理:密码存储、密钥管理、数据加密
  • 安全编码规范:最小权限原则、安全配置、审计日志
💡 参考答案在文末
判断题
1

使用pickle模块的HIGHEST_PROTOCOL版本可以防止反序列化攻击。

A

B

2

在Flask应用中使用flask_wtf.csrf.CSRFProtect可以自动保护所有POST请求免受跨站请求伪造(CSRF)攻击。

A

B

3

在生产环境中,应强制使用TLS 1.2或更高版本,并禁用TLS 1.0和TLS 1.1。

A

B

4

在Python Web应用中,将完整的异常堆栈信息返回给用户是安全实践,有助于用户理解错误原因。

A

B

单选题
5

根据OWASP Top 10,以下哪种漏洞在2021年排名第一位

A

SQL注入

B

身份识别和身份验证失败

C

访问控制失效

D

安全配置错误

6

在使用Python的requests库发送HTTPS请求时,以下哪种配置最不安全

A

requests.get(url, verify=True)

B

requests.get(url, verify='/path/to/ca-bundle.crt')

C

requests.get(url, verify=False)

D

requests.get(url, cert=('client.crt', 'client.key'))

7

以下哪种方式最容易导致API密钥泄露到Git仓库

A

使用环境变量存储密钥,在代码中通过os.environ.get('API_KEY')获取

B

将密钥存储在.env文件中,并在.gitignore中排除该文件

C

直接将密钥硬编码在Python源代码文件中

D

使用专门的密钥管理服务如AWS Secrets Manager

8

在处理用户输入时,以下哪种验证策略是最正确的

A

先进行输入清洗(如去除危险字符),再验证格式

B

先验证输入格式(如白名单匹配),再进行必要的清洗

C

只进行输入清洗,不需要格式验证

D

将输入存储后,在输出时才进行验证和清洗

9

以下关于Python中eval()exec()安全防护的说法,哪项是错误的?

A

使用ast.literal_eval()可以安全地解析用户输入的字面量表达式

B

通过限制__builtins__为空字典可以有效防止恶意代码执行

C

eval(input_str, {"__builtins__": {}}, {})是完全安全的防护方式

D

应优先使用json.loads()解析JSON数据而非eval()

10

在使用subprocess模块执行外部命令时,以下哪种方式最安全

A

subprocess.run(f"ping {host}", shell=True)

B

subprocess.run(["ping", host], shell=False)

C

subprocess.run(f"ping {host}", shell=False)

D

subprocess.call("ping " + host, shell=True)

11

在Python中处理内存中的敏感数据(如密码),以下哪种做法最不安全

A

将敏感数据存储在普通字符串变量中,依赖Python的垃圾回收

B

使用bytearray存储敏感数据,处理完毕后手动清零并删除

C

使用ctypes创建可控制内存的缓冲区,处理完毕后显式清零

D

尽量缩短敏感数据在内存中的生命周期,使用后立即清除

多选题
12

以下哪些是配置HTTPS连接时的安全最佳实践

A

始终启用证书验证,不使用verify=False

B

配置证书固定(Certificate Pinning)防止证书欺骗

C

使用TLS 1.2或更高版本,禁用旧版本协议

D

在代码中硬编码证书内容以防止篡改

E

检查证书的Subject或CN是否与预期域名匹配

13

以下哪些是防止敏感数据泄露到日志的正确做法

A

使用日志过滤器自动脱敏敏感字段

B

在日志配置中设置propagate=False防止日志传播

C

自定义日志格式,避免记录请求体中的敏感字段

D

将包含敏感数据的完整请求记录到DEBUG级别日志

E

使用结构化日志库如structlog,配合敏感字段过滤

14

以下哪些方法可用于Python沙箱逃逸?

A

通过().__class__.__bases__[0].__subclasses__()访问危险类

B

使用getattr(getattr(getattr((), '__class__'), '__bases__')[0], '__subclasses__')()

C

利用warnings.catch_warnings_module属性

D

使用open()函数读取文件(若未被禁用)

E

通过os.system()直接执行命令(若未被禁用)

15

以下哪些是Python中常见的代码注入攻击向量?

A

使用eval()处理用户输入的数学表达式

B

使用subprocess.run()shell=True且参数包含用户输入

C

使用Jinja2模板时渲染{{ user_input }}

D

使用pickle.loads()反序列化不可信数据

E

使用sqlalchemy参数化查询执行数据库操作

16

以下哪些是防止跨站脚本攻击(XSS)的正确做法

A

对用户输入进行HTML转义,如使用html.escape()

B

使用模板引擎的自动转义功能,如Jinja2的autoescape=True

C

使用Content-Security-Policy(CSP)头部限制脚本来源

D

将用户输入存储到数据库时进行编码

E

使用{{ user_input|safe }}渲染用户认为安全的内容

17

以下哪些是Python中安全处理敏感数据的正确做法

A

将敏感配置存储在环境变量中,使用os.environ.get()获取

B

使用python-dotenv.env文件加载配置,且.env已加入.gitignore

C

在日志输出中使用字符串替换隐藏敏感信息,如log.info(f"API Key: {key[:4]}****")

D

将敏感数据存储在Python模块的常量中,并在发布时删除

E

使用内存安全的字符串类型,确保敏感数据可被显式清除

18

以下关于使用正则表达式进行输入验证的说法,哪些是正确的

A

白名单正则表达式(如^[a-zA-Z0-9]+$)比黑名单更安全

B

复杂的正则表达式可能导致拒绝服务(ReDoS)攻击

C

正则表达式可以完美防止所有类型的注入攻击

D

应使用re.fullmatch()而非re.search()进行完整字符串验证

E

对于复杂的验证逻辑,应优先使用专门的验证库而非正则

填空题
19

Jinja2服务端模板注入(SSTI)的核心原因是模板引擎会将用户输入作为____________执行,而非仅作为字符串输出。要安全渲染用户输入,应使用{{ ____________ }}进行HTML转义,或将用户数据通过render_template()____________传递。检测SSTI漏洞常用payload为{{ 7*7 }},若页面返回49则存在漏洞。

20

在Django项目中,敏感配置应从settings.py中分离,推荐使用django-____________包。该包允许将配置存储在.env文件,通过os.environ.get()Env()类读取。对于数据库密码等敏感值,应使用Env.____________()方法获取。在部署时,生产环境的敏感配置应通过____________注入,而非存储在代码仓库中。

参考答案
1.错误 2.正确 3.正确 4.错误 5.C 6.C 7.C 8.B 9.C 10.B 11.A 12.A;B;C;E 13.A;C;E 14.A;B;C;D;E 15.A;B;D 16.A;B;C 17.A;B;C;E 18.A;B;D;E 19.模板代码;user_input|e;参数 20.environ;str;环境变量
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 变量与数据类型专项测试
下一套试卷 → 并发与异步高级专项测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码