全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 36 道配套习题

📝 配套习题(36 题)

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

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

21
填空题

Python中进行表单验证推荐使用________库,它通过类型注解自动验证数据。对于邮箱验证可使用EmailStr类型,对于URL验证可使用_______类型。防止路径遍历攻击应使用os.path.________()规范化路径,再检查是否在允许目录内。对于文件上传,应验证文件扩展名使用______而非黑名单。

22
单选题

以下关于密码哈希存储的说法,哪项是最正确的

A

使用MD5哈希存储密码,因为计算速度快

B

使用SHA-256加盐存储密码,足够安全

C

使用bcrypt或argon2等专门设计的密码哈希算法

D

对密码进行对称加密后存储,便于后续解密验证

23
多选题

以下哪些是配置密码哈希算法时的正确安全实践

A

bcrypt的工作因子(rounds)设置为12以上,增加计算时间

B

argon2配置足够大的memory_cost,抵抗GPU攻击

C

盐值使用随机生成,且每个用户盐值唯一

D

将盐值和哈希值分开存储在不同数据库表中

E

定期更新哈希算法的工作因子,对弱哈希进行重新哈希

24
填空题

bcrypt哈希输出格式为$2b$______$salt22chars_hash31chars。其中$2b$表示算法版本,12表示________(迭代次数为2^12次),salt占22个字符,哈希值占31个字符。验证密码使用bcrypt._______()函数,它会自动从哈希字符串中提取盐值进行比对。argon2算法比bcrypt更适合抵抗______攻击,因为它需要大量内存计算。

25
单选题

以下关于Python中加密操作的说法,哪项是正确的

A

对敏感数据存储,应使用RSA非对称加密

B

AES对称加密的密钥可以硬编码在代码中,因为加密后数据已安全

C

数据库中的敏感字段应使用对称加密,密钥存储在密钥管理服务

D

使用Python内置的hashlib.sha256()可以进行双向加密解密

26
多选题

使用Python的cryptography库进行加密时,以下哪些是安全最佳实践

A

使用Fernet对称加密,密钥从密钥管理服务获取

B

AES加密时使用CBC模式,IV随机生成且每次不同

C

RSA加密时使用OAEP填充而非PKCS#1 v1.5

D

密钥轮换时使用新密钥加密旧密钥加密的数据

E

加密数据的完整性验证使用HMAC而非仅依赖加密

27
填空题

混合加密架构中,使用______对称加密加密大量数据,使用______非对称加密加密对称密钥。发送方用接收方的______加密AES密钥,接收方用自己的______解密获得AES密钥后再解密数据。这种方式解决了对称加密的密钥分发问题,同时保持了非对称加密的安全性和对称加密的高效性。

28
单选题

在Python中生成用于密码学目的的随机数,应使用哪个模块?

A

random模块的random.randint()函数

B

secrets模块的secrets.randbelow()函数

C

numpynumpy.random.randint()函数

D

os.urandom()直接调用系统随机源

29
判断题

Python的random模块使用Mersenne Twister算法,生成的随机数可以被预测,因此不适合用于生成密码学安全令牌。

A

B

30
多选题

以下哪些是Python secrets模块的正确使用场景

A

生成用户密码重置令牌

B

生成API密钥和访问令牌

C

生成密码学安全随机盐值

D

生成用于抽彩活动的获奖号码

E

生成密码学安全密钥

31
填空题

Python ssl模块中,使用ssl.create________context()创建默认安全上下文。设置最小TLS版本使用context.minimum_version = ssl.TLSVersion.TLS______。加载证书文件使用context.load_______locations(cafile)方法。HTTPS请求时,将SSL上下文传递给HTTP库使用urllib.request._______(url, context=context)

32
填空题

防止SQL注入的核心原则是使用______查询,而非字符串拼接。在Python中使用SQLAlchemy时,使用session.execute(text("SELECT * FROM users WHERE id=:id"), {'id': user_id})。使用raw SQL时,参数使用______而非直接拼接。ORM框架自动处理参数化,如Django ORM的User.objects.get(id=user_id)。验证用户输入的白名单正则使用re._________()而非re.search()

33
判断题

输入清洗和输入验证是相同的安全措施,只是名称不同。

A

B

34
判断题

密码哈希的盐值必须保密存储,否则攻击者可以利用盐值破解密码。

A

B

35
判断题

加密和哈希是相同的操作,都可以将数据转换为不可读形式,并且都可以逆向还原原始数据。

A

B

36
填空题

Python secrets模块提供密码学安全随机数生成。生成URL安全令牌使用secrets.token_______(n),返回约1.3n字符的字符串。生成十六进制令牌使用secrets.token______(n),返回2n字符的十六进制字符串。生成随机字节使用secrets.token______(n)。从序列中安全随机选择使用secrets.______(sequence)

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

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

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

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

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