在遇到安全挑战时,我遇到了以下代码:
declare const require;
const locale = localStorage.getItem('locale');
require(`./file.${locale}.json`)
最流行的解决方案涉及用一些PHP代码替换用户代理字段,例如:function write($msg){
$content=$msg;
$content=$content . " " . $_SERVER['HTTP_USER_AGENT'];
$fd=fopen("publicFile","a");
fwrite($fd,$content);
fclose($fd);
}
托管挑战的服务器使用PHP v5.6.33-0。我无法使用PHP v7.2.10在计算机上重现此行为。 User-Agent: <?php readfile("somethingInteresting"); ?>
中的代码未执行,并且“ somethingInteresting”的内容也未写入到publicFile中,就像在挑战期间一样。我的问题是为什么?在5.6.33之后,它们是否更改了字符串串联在PHP中的工作方式?实际上,我很惊讶它在挑战中发挥了作用。