商城网站建设视频,wordpress获取摘要,ccd设计公司很厉害吗,浙江省建设厅继续教育网站首页题目描述#xff1a;小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
代码解读
$a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量#xff0c;并将其赋值给变量a。符号用于禁止错误输出#xff0c;如果不存在参数a则会将变量a设置为NULL。
$b$_GET[b];…题目描述小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
代码解读
$a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量并将其赋值给变量a。符号用于禁止错误输出如果不存在参数a则会将变量a设置为NULL。
$b$_GET[b]; 从HTTP GET请求参数中获取一个名为b的变量并将其赋值给变量b。
if($a0 and $a){ echo $flag1; } 如果变量a等于0并且a存在则输出变量flag1的值。但是由于a不可能同时为0和存在因此这个if语句不会执行。
if(is_numeric($b)){ exit(); } 如果变量b是一个数字则终止程序的执行。
if($b1234){ echo $flag2; } 如果变量b的值大于1234则输出变量flag2的值。 PHP弱语言特性
在 PHP 中有两种比较运算符用于比较两个值是否相等它们分别是 和 它们的区别如下 比较运算符是一个松散比较它只比较变量的值而不考虑变量的数据类型。当比较两个变量时如果它们的值相等则返回 true。 例如0 0 返回 true。 恒等比较运算符是一个严格比较它不仅比较变量的值还比较变量的数据类型和内存地址。当使用恒等比较运算符比较两个变量时如果它们的值和数据类型都相等则返回 true。 例如0 0 返回 false。
因为 操作符仅比较值所以当比较字符串时PHP 会尝试将字符串转换为数字进行比较 具体来说PHP会依次执行以下步骤 如果其中一个操作数是布尔值true或false则将其转换为1true或0false。 如果其中一个操作数是null将其转换为整数0。 如果其中一个操作数是数组将其转换为字符串Array。 如果操作数中的任何一个是对象则将其转换为字符串Object。 对于两个操作数都是字符串的情况PHP会将两个字符串中的非数字字符删除然后将剩余的数字字符串转换为相应的数字进行比较。 如果以上都不适用则将字符串转换为数字进行比较。
例如当比较字符串0123和整数123时返回 true当比较字符串12xxx和整数12时返回 true因为 PHP 会将字符串转换为数字后进行比较。 姿势
参数a限制绕过
由于a等于0并且a存在所以可构造开头数值为0的字符串a GETa0qiu
参数b限制绕过
由于b不能为数字且b数值大于1234因此可构造开头数值大于1234的字符串b GETb1235qiu
回显如下 总结
该题结合GET传参姿势考察PHP代码的解读及PHP弱语言特性。