大小写绕过

PHP 中有许多不用考虑大小写的地方,如:

  • PHP 标签<?php
    一般情况下必须严格小写,但某些服务器配置可能支持大写如 <?Php 这样的写法。目前做的做题能用。

  • 伪协议名称
    php://data://等伪协议名称可以大小写混用,但目前做的题只有php://不用考虑大小写,data://大小写混用或是全大写就无法正常文件包含。所以现在大小写混用**只考虑php://**。

  • 关键字和控制结构
    ifelsewhileforechoreturn 等。例如,IF (...) {...}ECHO "Hello"; 是合法的。

  • 函数名(用户定义和内置)
    用户定义的函数和PHP内置函数在调用时不区分大小写。例如:

    1
    2
    3
    function myFunc() {}
    myfunc(); // 可调用
    STRTOLOWER("ABC"); // 等同于 strtolower()
  • 类名和方法名
    用户定义的类名和方法名在引用时不区分大小写。例如:

    1
    2
    3
    4
    5
    6
    class MyClass {}
    $obj = new MYCLASS(); // 可实例化
    class MyClass {
    public function myMethod() {}
    }
    $obj->MYMETHOD(); // 可调用
  • 常量(通过 define 定义且启用大小写不敏感时)
    使用 define("NAME", value, true) 定义的常量,第三个参数为 true 时大小写不敏感。例如:

    1
    2
    define("GREETING", "Hello", true);
    echo greeting; // 输出 "Hello"

对大小写敏感的部分

  • 变量名(如 $var$VAR 不同)。
  • 属性名和常量(默认情况下)。
  • 魔术常量(如 __FILE____LINE__)和魔术方法(如 __construct(),需严格拼写)。
  • 预定义变量(如 $_GET$_POST)。

可以活用于一些题,可惜知道的有点晚。