因为很久没好好写什么文章了,原本打算这篇也好好写的但是一开始就直接想着如何简化了,很多代码层的东西都没去细说。
文章开头我先简单给不懂php的朋友讲解一些东西
include 和require的区别
include 引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。
require 引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。
简单好理解就是上面这样
具体点可以参考这里
https://www.runoob.com/w3cnote/php-different-include-and-require.html
问题分析
phpyun使用最初的360webscan那个脚本和自己类似360的一个脚本(很变态,有点搞不定)但是他的两个脚本加载方式是这样的
include(CONFIG_PATH.'db.safety.php');
if(is_file(LIB_PATH.'webscan360/360safe/360webscan.php')){
require_once(LIB_PATH.'webscan360/360safe/360webscan.php');
}
这里采用的是inclde去包含但是如果我们将这个文件删除后,waf功能失效且不影响代码运行,而且有意思的是
function quotesGPC() {
if(!get_magic_quotes_gpc()){
$_POST = array_map("addSlash", $_POST);
$_GET = array_map("addSlash", $_GET);
$_COOKIE = array_map("addSlash", $_COOKIE);
}
}
一般我们遇见的cms都会将自己的伪gpc写在全局文件类似common或者global文件中但是phpyun是将这种全局伪gpc写在db.safe中