織夢DEDECMS安全防護設置及漏洞修復

一、程序一定要從織夢官網下載,其他地方下載的不能保證安全。

二、下載後的程序在正常運行後,要刪除下列文件夾(根據你的需要選擇刪除)。

member 會員文件夾整個刪除
special 專題文件夾整個刪除
install 安裝文件夾整個刪除
robots.txt 文件刪除

刪除 /templets/default 官方默認模板這個文件夾(在你自己有模板的情況下,如果沒有,請勿刪除)。

刪除PLUS文件夾除下列文件外的所有文件,保留下面幾個文件。
/plus/img (文件夾)
/plus/count.php
/plus/diy.php
/plus/list.php
/plus/search.php
/plus/view.php

三、修改默認後臺管理目錄名稱,安裝時不要用默認的admin當管理員帳號及密碼。

四、修復剛剛下載的織夢最新程序包裏已知漏洞

打開 /include/dialog/select_soft_post.php 搜索

$fullfilename = $cfg_basedir.$activepath.'/'.$filename;

在它上面加入

if (preg_match('#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))) {
	ShowMsg("你指定的文件名被系統禁止!",'javascript:;');
	exit();
}

打開 /dede/media_add.php 找到(dede是你網站管理後臺目錄名稱)

$fullfilename = $cfg_basedir.$filename;

在它上面加入

if (preg_match('#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))){
	ShowMsg("你指定的文件名被系統禁止!",'java script:;');
	exit();
}

打開/dede/config.php

搜索

if(!isset($token) || strcasecmp($token, $_SESSION['token']) != 0){

大約在67行,把它替換爲

if(!isset($token) || strcasecmp($token, $_SESSION['token']) !== 0){

五、利用僞靜態功能禁止以下目錄運行php腳本

apache環境

RewriteEngine on
#安全設置 禁止以下目錄運行指定php腳本
RewriteCond % !^$
RewriteRule a/(.*).(php)$ – [F]
RewriteRule data/(.*).(php)$ – [F]
RewriteRule templets/(.*).(php|htm)$ – [F]
RewriteRule uploads/(.*).(php)$ – [F]

iis環境

<rule name="Block data" stopProcessing="true">
	<match url="^data/(.*).php$" />
	<conditions logicalGrouping="MatchAny">
		<add input="{USER_AGENT}" pattern="data" />
		<add input="{REMOTE_ADDR}" pattern="" />
	</conditions>
	<action type="AbortRequest" />
</rule>
<rule name="Block templets" stopProcessing="true">
	<match url="^templets/(.*).php$" />
	<conditions logicalGrouping="MatchAny">
		<add input="{USER_AGENT}" pattern="templets" />
		<add input="{REMOTE_ADDR}" pattern="" />
	</conditions>
	<action type="AbortRequest" />
</rule>
<rule name="Block SomeRobot" stopProcessing="true">
	<match url="^uploads/(.*).php$" />
	<conditions logicalGrouping="MatchAny">
		<add input="{USER_AGENT}" pattern="SomeRobot" />
		<add input="{REMOTE_ADDR}" pattern="" />
	</conditions>
	<action type="AbortRequest" />
</rule>

Nginx環境

這段配置代碼一定要放在 location ~ .php(.*)$ 的前面纔可以生效,配置完後記得重啓Nginx生效。

location ~* /(a|data|templets|uploads|images)/(.*).(php)$ {
	return 403;
}

寶塔面板在配置文件裏面。加在紅框上面即可。如下圖在這裏插入圖片描述
給所有站加上的話。請打開下面路徑,根據你的PHP版本找到相應的文件。我這裏是5.4版本的。
在這裏插入圖片描述
在最上面添加上面代碼,然後重啓服務。親測有效。
在這裏插入圖片描述
檢測設置成功的方法,新建一個隨意內容的php文件放到a|data|templets|uploads任意文件夾,如果訪問出現4.3錯誤,說明設置正常。如果顯示你剛纔設置的內容,剛是失敗。按步驟好好檢測一下看看是不是設置錯誤。

六、防止後臺登錄路徑被爆

網上有一個爆網站後臺的方法:就是訪問/data/mysql_error_trace.inc或者/data/mysqli_error_trace.inc,分析裏面的代碼來爆網站後臺。可在僞靜態配置文件里加入下面代碼即可,這是nginx下的配置文件,親測有效,其他運行環境自行轉換

location /data {
rewrite ^/data\/(.*)$ /404.html;
}

這樣,訪問DATA的文件全都會提示404錯誤。親測有效!

我們可以關閉這個生成這個文件

方法:

打開 /include/dedesql.class.php 找到

//保存MySql錯誤日誌
$fp = @fopen($errorTrackFile, 'a');
@fwrite($fp, '<'.'?php  exit();'."\r\n/*\r\n{$savemsg}\r\n*/\r\n?".">\r\n");
@fclose($fp);

這幾行刪除就行了,如果你的 data 文件夾裏面有 mysql_error_trace.inc 文件,記得刪除它。

同理我們還可以設置禁止訪問plus|templets|uploads等目錄

location /plus {
rewrite ^/plus\/(\w+)\.php(.*)$ /404.html;
}
location /templets {
rewrite ^/templets/(.*)/(.*).htm$ /404.html;
}
location /uploads {
rewrite ^/uploads\/(\w+)\.php(.*)$ /404.html;
}

七、增加XSS跨站、SQL注入防護代碼

將代碼添加到\data\common.inc.php這個文件或者是你想防護的頁面即可。
注意:添加後可能導致寫文章不能寫包含php、sql入駐等代碼,比較雞肋。

function gjj($str)
{
    $farr = array(
        "/\\s+/",
        "/]*?)>/isU",
        "/(]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
    );
    $str = preg_replace($farr,"",$str);
    return addslashes($str);
}
function hg_input_bb($array)
{
    if (is_array($array))
    {
        foreach($array AS $k => $v)
        {
            $array[$k] = hg_input_bb($v);
        }
    }
    else
    {
        $array = gjj($array);
    }
    return $array;
}
$_REQUEST = hg_input_bb($_REQUEST);
$_GET = hg_input_bb($_GET);
$_POST = hg_input_bb($_POST);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章