所以我有这个片段:
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/
提前致谢:)
答案 0 :(得分:2)
怎么样
$s1= null;
$s2 = "";
这不适用于所提供的工具,但可以从命令行运行。
也
$s1 = "";
$s2 = false;
答案 1 :(得分:2)
好的,所以第一个赠送的是该网站是一个安全陷阱网站,因此他们希望向您展示PHP中的漏洞。因此,虽然其他答案是有效的,但在通过互联网传递时它们不起作用。
要解决这个挑战,您实际上必须修改页面上的HTML并将其中一个键转换为数组,如:<input name="s2[]" value="s2" />
然后提交表单。当发生这种情况时,strcmp会将$ _POST ['s1'](字符串)与$ _POST ['s2'](数组)进行比较,从而导致PHP将strcmp评估为真!