一、程序一定要從織夢官網下載,其他地方下載的不能保證安全。
二、下載後的程序在正常運行後,要刪除下列文件夾(根據你的需要選擇刪除)。
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);