#!/usr/bin/env python

"""
Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re  # 导入正则表达式模块，用于匹配字符串中的模式

from lib.core.data import kb  # 从核心库导入知识库，包含SQL关键字等信息
from lib.core.enums import PRIORITY  # 从核心库导入优先级枚举

# 设置优先级为普通
__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    这个函数用于篡改（tamper）输入的payload，将其中的关键字字符转换为小写形式（例如，'SELECT' -> 'select'）。

    参数：
        payload：要篡改的原始payload。
        **kwargs：其他可选参数（在本函数中未使用）。

    测试情况：
        * Microsoft SQL Server 2005
        * MySQL 4, 5.0 和 5.5
        * Oracle 10g
        * PostgreSQL 8.3, 8.4, 9.0

    注意：
        * 这个篡改方法对于绕过那些具有写得不好的允许正则表达式的非常弱的定制Web应用防火墙很有用。

    示例：
        >>> tamper('INSERT')
        'insert'
    """

    retVal = payload  # 初始化返回值为输入的payload


    if payload:  # 如果payload不为空
        # 遍历payload中所有匹配单词边界的字母或下划线模式的字符串
        for match in re.finditer(r"\b[A-Za-z_]+\b", retVal):
            word = match.group() # 获取匹配的单词
            # 如果匹配的单词是SQL关键字，则将其转换为小写
            if word.upper() in kb.keywords:
                retVal = retVal.replace(word, word.lower())

    return retVal
