全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页

安全编程专项测试

20 题 40 分钟 难度:

考察知识点

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

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

A

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

B

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

C

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

D

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

2
多选题

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

A

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

B

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

C

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

D

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

E

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

3
填空题

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

4
单选题

在使用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)

5
判断题

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

A

B

6
多选题

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

A

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

B

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

C

利用warnings.catch_warnings_module属性

D

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

E

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

7
单选题

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

A

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

B

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

C

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

D

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

8
多选题

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

A

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

B

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

C

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

D

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

E

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

9
填空题

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

10
判断题

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

A

B

11
单选题

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

A

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

B

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

C

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

D

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

12
多选题

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

A

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

B

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

C

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

D

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

E

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

13
单选题

在使用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'))

14
判断题

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

A

B

15
多选题

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

A

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

B

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

C

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

D

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

E

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

16
单选题

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

A

SQL注入

B

身份识别和身份验证失败

C

访问控制失效

D

安全配置错误

17
判断题

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

A

B

18
多选题

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

A

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

B

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

C

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

D

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

E

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

19
单选题

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

A

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

B

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

C

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

D

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

20
多选题

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

A

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

B

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

C

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

D

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

E

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

← 上一个试卷 变量与数据类型专项测试
下一个试卷 → 并发与异步高级专项测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库