PHP中函数的尴尬比较

时间:2013-07-03 21:55:57

标签: php comparison

所以我有这个片段:

function compare1($s1, $s2)
{
    return $s1===$s2;
}

function compare2($s1, $s2)
{
    return !strcmp($s1, $s2);
}

function challenge($s1, $s2) //Objective: return TRUE
{
    return compare1($s1, $s2) ^ compare2($s1, $s2);
}

我要求的是为$ s1和$ s2变量提供/追加/赋值,以便最后一个函数返回TRUE。

我已经尝试了几乎所有我能想到的东西,比如$s1='1' and $s2=1确实返回TRUE:

  

var_dump(compare1('1',1)^ compare2('1',1)); // output:int 1

挑战的创造者告诉我,我不应该或者更确切地说不能为变量分配整数值,但问题是没有布尔变化。这是我正在谈论的网站,以便您可以看到是否可以提出解决方案:http://securitytraps.no-ip.org/challs/strcmp/

提前致谢:)

2 个答案:

答案 0 :(得分:2)

怎么样

$s1= null;
$s2 = "";

这不适用于所提供的工具,但可以从命令行运行。

$s1 = "";
$s2 = false;

答案 1 :(得分:2)

好的,所以第一个赠送的是该网站是一个安全陷阱网站,因此他们希望向您展示PHP中的漏洞。因此,虽然其他答案是有效的,但在通过互联网传递时它们不起作用。

要解决这个挑战,您实际上必须修改页面上的HTML并将其中一个键转换为数组,如:<input name="s2[]" value="s2" />然后提交表单。当发生这种情况时,strcmp会将$ _POST ['s1'](字符串)与$ _POST ['s2'](数组)进行比较,从而导致PHP将strcmp评估为真!