#!/usr/bin/env python

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

import os  # 导入操作系统接口模块
import re  # 导入正则表达式模块

from lib.core.common import singleTimeWarnMessage  # 从核心库导入单次警告消息函数
from lib.core.enums import DBMS  # 从核心库导入数据库管理系统枚举
from lib.core.enums import PRIORITY  # 从核心库导入优先级枚举

# 设置优先级为高
__priority__ = PRIORITY.HIGH

def dependencies():
    singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):
    """
    这个函数用于篡改(tamper)输入的payload,将MySQL中的'LIMIT M, N'语句替换为其等效的'LIMIT N OFFSET M'形式。

    参数:
        payload:要篡改的原始payload。
        **kwargs:其他可选参数(在本函数中未使用)。

    要求:
        * 仅适用于MySQL数据库。

    测试情况:
        * MySQL 5.0 和 5.5

    注意:
        * 这个篡改方法对于绕过某些针对'LIMIT M, N'形式的防御机制很有用。

    示例:
        >>> tamper('LIMIT 2, 3')
        'LIMIT 3 OFFSET 2'
    """


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

    # 使用正则表达式查找'LIMIT M, N'形式的语句
    match = re.search(r"(?i)LIMIT\s*(\d+),\s*(\d+)", payload or "")
    if match:  # 如果找到匹配项
         # 替换为'LIMIT N OFFSET M'形式
        retVal = retVal.replace(match.group(0), "LIMIT %s OFFSET %s" % (match.group(2), match.group(1)))

    return retVal  # 返回篡改后的payload