MST
星途 面试题库

面试题:Python字符串插值安全过滤:自定义安全策略

设计一个Python字符串插值安全过滤框架,能够支持多种不同的安全策略(如SQL安全策略、XSS安全策略、文件路径安全策略等)。要求框架具备可扩展性,能够方便地添加新的安全策略。请描述整体设计思路,并给出核心代码示例(至少包括安全策略接口定义、策略注册、字符串插值及安全过滤的核心逻辑)。
16.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

整体设计思路

  1. 定义安全策略接口:创建一个基类接口,所有具体的安全策略类都继承自该接口,确保每个策略类都有统一的方法来执行过滤操作。
  2. 策略注册机制:通过一个注册函数或装饰器,将具体的安全策略类注册到一个全局的策略注册表中,方便后续调用。
  3. 字符串插值及安全过滤核心逻辑:在进行字符串插值时,根据指定的安全策略从注册表中获取相应的过滤函数,并对插值的内容进行过滤,确保输出的字符串符合安全要求。同时,框架应具备扩展性,即新的安全策略类只需继承接口并实现过滤方法,然后通过注册机制即可添加到框架中。

核心代码示例

# 安全策略接口定义
class SecurityPolicyInterface:
    def filter(self, value):
        raise NotImplementedError

# 策略注册表
policy_registry = {}

# 策略注册装饰器
def register_policy(policy_name):
    def decorator(cls):
        policy_registry[policy_name] = cls()
        return cls
    return decorator

# SQL安全策略示例
@register_policy('sql')
class SQLSecurityPolicy(SecurityPolicyInterface):
    def filter(self, value):
        # 简单示例,实际应用需要更复杂的转义等操作
        return value.replace("'", "''")

# XSS安全策略示例
@register_policy('xss')
class XSSSecurityPolicy(SecurityPolicyInterface):
    def filter(self, value):
        # 简单示例,实际应用需要更多的HTML转义等操作
        return value.replace('<', '&lt;').replace('>', '&gt;')

# 文件路径安全策略示例
@register_policy('file_path')
class FilePathSecurityPolicy(SecurityPolicyInterface):
    def filter(self, value):
        # 简单示例,实际应用需要更多的路径验证等操作
        import os
        return os.path.normpath(value)

# 字符串插值及安全过滤核心逻辑
def safe_interpolate(template, values, policy_name):
    if policy_name not in policy_registry:
        raise ValueError(f"Unknown security policy: {policy_name}")
    policy = policy_registry[policy_name]
    result = template
    for key, value in values.items():
        filtered_value = policy.filter(value)
        result = result.replace(f'{{{key}}}', filtered_value)
    return result

可以使用以下方式调用:

# 使用示例
template = "SELECT * FROM users WHERE username = '{username}'"
values = {'username': "O'Connor"}
policy_name ='sql'
result = safe_interpolate(template, values, policy_name)
print(result)