Dedecms 360网站安全卫士100%漏洞修复

Dedecms 360网站安全卫士100%漏洞修复,按照官方的程序是100%的安全的,昨天去版权后360网站卫士提示有sql漏洞,是因为只注释掉加密字符串,后面的特殊操作一起注释掉就会100%安全了,不在提示sql注册漏洞了。

/*
$arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x62,0x79);
$arrs2 = array(0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x77,0x77,0x77,0x2e,0x64,0x65,0x64,0x65,0x63,0x6d,0x73,0x2e,0x63,0x6f,0x6d,0x20,0x74,0x61,0x72,
0x67,0x65,0x74,0x3d,0x27,0x5f,0x62,0x6c,0x61,0x6e,0x6b,0x27,0x3e,0x50,0x6f,0x77,0x65,0x72,0x20,
0x62,0x79,0x20,0x44,0x65,0x64,0x65,0x43,0x6d,0x73,0x3c,0x2f,0x61,0x3e);

//特殊操作
if(isset($GLOBALS[‘arrs1’]))
{
$v1 = $v2 = ”;
for($i=0;isset($arrs1[$i]);$i++)
{
$v1 .= chr($arrs1[$i]);
}
for($i=0;isset($arrs2[$i]);$i++)
{
$v2 .= chr($arrs2[$i]);
}
$GLOBALS[$v1] .= $v2;
}

*/

为什么会这样呢?后面的特殊操作看起来像是解密程序。本地运行了下结果,就是版权了。如下图:

Dedecms版权

Dede数据库批量修改文章内容超链接代码

最近搞了一个新站,把就网站的内容全部采集了,但是就网站里面含有超链接,在新网站中的超链接是无效的,而且很多超链接,在Mysql中不支持正则表达式,原来想在Mysql中替换掉','') -->

这样的话比如超链接 替换后会留下 http://www.0535code.com/123.html 超链接,这种效果不是想要的,然后想了其他的办法,用PHP+Mysql,php的preg_replace函数支持正则表达式,查了下这个函数和正则表达式,用以下程序即可批量替换。

<?php
//如是影响的条数为-1,则证明替换失败。
require_once("./include/common.inc.php");//使用的时候更改一下引用文件名
$sql="select aid,body from dede_addonarticle where body like '%域名%'";
$row=0;
$dsql->execute('me',$sql);
while($rs=$dsql->getArray('me')){
$pattern='/<a.*href=".*www\.域名\.com\/.*.*>(.*)<\/a>/U';
$str=$rs['body'];
$replacement='${1}';
$str2=preg_replace($pattern,$replacement,$str);
$aid=$rs['aid'];
//$sqlbak="update_addonarticel set body='$str' where aid=$aid";
//file_put_contents("./logbak.txt",$sqlbak.';',FILE_APPEND);
//主要是为了防止替换错误恢复使用
$replacesql="update dede_addonarticle set body=replace(body,'$str','$str2') where aid=$aid";
//使用的时候更改一下表名
//echo '<br />'.$replacesql;
if(!$dsql->executenonequery($replacesql)){
    echo "error-aid--->".$rs['aid'].'<br/>';
};
file_put_contents("./log.txt",$replacesql,FILE_APPEND);
$row++;
}
echo '影响的条数'.$row;

?>

然后还有一个问题,执行了以后发现部分超链接还是存在,然后看了下,原来是正则没有匹配到,那需要再复制一个文件,修改下$pattern=’/(.*)<\/a>/U’;这个正则表达式,一般网站超链接会写两种,第一种是http://ww.0535code.com/目录,另一种是http://0535code.com/目录,一个带www的一个不带的,所以正则没有匹配到,修改下如下:$pattern=’/(.*) 就是在正则中去掉www即可。

Dede5.7问答管理中问题管理和答案管理打不开

?? Dede5.7问答管理中问题管理和答案管理打不开,原来是WIN下是可以打开的传到Linux服务器就打不开了,之前遇到过几次这种现象,有一次纠结了半天时间,在WIN服务器是没问题的,传到Linux服务器就出现问题了,这种问题在WEB中的话首先就要找是否是文件名的大小写不对了? Dede的这个问题就是文件大小写的问题。
需要到include目录下找到Lurd.class.php文件,把L改为l,即大写改为小写即可,ok问题解决。

Dede批量修改动态或者静态浏览操作

无意间碰到一个问题,需要把网站动态的所有栏目更新为静态化,网站存在一部分没有实现静态化,在线生成的话会提示,该类目是动态类,这样就无法生成静态栏目了,写了个SQL语句一键修改,我是在 phpmyadmin下修改的,也可以通过后台实现一键修改,详情如下:

进入后台→系统→SQL命令行工具→运行SQL命令行: 单行命令执行查询命令:
1.将所有文档设置为“仅动态”:update dede_archives set ismake=-1
2.将所有文档设置为“仅静态”:update dede_archives set ismake=1
3.将所有栏目设置为“使用动态页”: update dede_arctype set isdefault=-1
4.将所有栏目设置为“使用静态页”: update dede_arctype set isdefault=1

下面是批量修改文章命名规则的SQL语句:
update `dede_arctype` set namerule='{typedir}/{Y}{M}{D}{aid}.html’

顺便加上一个批量删除文章的SQL语句
DELETE FROM dede_archives WHERE id >= 60 and id<=2269;
60是最小值,2269是最大值,在删除之前一定要备份下dede_archives字段哦,以防把不想删的文章也给删掉了。

批量替换文章关键词SQL语句:
update `dede_addonarticle` set body=replace(body,’替换前关键词’,’替换后关键词’);//文章内容
update `dede_archives` set title=replace(title,’替换前关键词’,’替换后关键词’); //文章标题
update `dede_archives` keywords=replace(keywords,’替换前关键词’,’替换后关键词’); //文章关键词
update `dede_archives` set description=replace(description,’替换前关键词’,’替换后关键词’); //关键词描述

Dede文章列表arclist调用最新文章及内容

今天某客户需要实现Dedecms列表页中最新文章和内容,奇怪,一般人都不会这样显示,这样的话就跟博客差不多了,既然有这需求就想办法实现吧。用了以下代码实现的:
{dede:arclist typeid=’26’? row=’1′ orderby=’pubdate’}
<a href=”[field:arcurl /]”>[field:title /]</a>? //文章标题
[field:id runphp=’yes’]
$aid = @me;
$row = $GLOBALS[‘dsql’]->GetOne(“Select body From 0535code_addonarticle where aid=’$aid’ “);
@me = “{$row[‘body’]}”;
[/field:id]
//上面代码就是调用最新文章内容的代码了。
{/dede:arclist}
如果需要自定义内容的话可以用?{dede:field.content/} 这个标签。

DEDE文章图片自动添加ALT属性

修改文件:Include/ arc.archives.class.php
模板标签:{dede:field.body/} ,如果是其它字段,可以修改$this->Fields[‘body’] 为其它的字段名。
效率说明:使用了正则处理,会降低一些生成速度,如果数据量小,则可以忽略。
修改方法:
首先查找

//设置全局环境变量
$this->Fields['typename'] = $this->TypeLink->TypeInfos['typename'];
SetSysEnv($this->Fields['typeid'],$this->Fields['typename'],$this->Fields['aid'],$this->Fields['title'],'archives');

在其代码下面填写

//替换图片Alt为文档标题
$this->Fields['body'] = str_ireplace(array('alt=""','alt=\'\''),'',$this->Fields['body']);
$this->Fields['body'] = preg_replace("@ [\s]{0,}alt[\s]{0,}=["'\s]{0,}[\s\S]{0,}["'\s] @isU"," ",$this->Fields['body']);
$this->Fields['body'] = str_ireplace("<img " ,"<img alt='".$this->Fields['title']."' ",$this->Fields['body']);

DedeCms网站换空间,后台不显示,栏目不显示

DedeCms网站换空间,后台不显示,栏目不显示,栏目内容不显示等今天就碰到这个问题了,好奇怪,网上好多人都说是用记事本修改的产生了BOM,用DW就不会产生,有说换下原来的后台的,有说重装的,有说找文件替换的,这几种办法貌似都不可取,重新安装的话很麻烦的,替换文件的话,我修改了好多文件,基本不记得是那个了,到网上找了一个去掉BOM遍历所有文件的PHP源码 ,结果用了一下,网站就好了,后台可以直接进去了,不必用.login.php了,网站栏目点内容也可以进去了,原来都是 空白的,刚开始后台我看可以通过路径进去,就没在意,结果没想到后台栏目里面的内容也出问题了,或许其他人也会碰到栏目不显示也不一定,因为用记事本修改了。分享下解决此问题的源码。

把下面代码保存为0535code.php传到网站FTP,http://网址/0535code.php 运行下就ok了。

<?php
if (isset($_GET['dir'])){ //设置文件目录
$basedir=$_GET['dir'];
}else{
$basedir = '.';
}
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..'){
if (!is_dir($basedir."/".$file)) {
echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
}else{
$dirname = $basedir."/".$file;
checkdir($dirname);
}
}
}
closedir($dh);
}
}
function checkBOM ($filename) {
global $auto;
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
if ($auto == 1) {
$rest = substr($contents, 3);
rewrite ($filename, $rest);
return ("<font color=red>BOM found, 已经为你清空了BOM._<a>http://www.0535code.com</a></font>");
} else {
return ("<font color=red>BOM found.</font>");
}
}
else return ("BOM Not Found.");
}
function rewrite ($filename, $data) {
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}
?>

dede后台打开空白的解决办法

今天下午给客户上传网站,本地数据库和源码是正常的,客户的主机是Linux的,在Linux下是区分大小写的,刚开始传上去,怎么有些访问不了呢,看了一下,原来是大小写问题,Linux安全,但是有点麻烦,然后就是一个大问题,后台打开直接是空白了,到网上查来查去的,说什么的都有,刚开始数据库链接信息还没修改,所以链接不上,厚爱登陆不上是正常的,科斯一会数据库链接配置好了,前台可以浏览了,但是后台依然进不去,一片空白。
纠结的网上查了一下,还是不晓得那里的问题,差一点想深入找一下断点函数,揪出错误的原因,然后看了下Dede后台的页面,想了下,进入www.0535code.com/dede/index.php?试试看,结果还是不行,不过一般的登陆页面命名会是 login,这个也不例外,我就试了一下这个:www.0535code.com/dede/login.php?试一下,可以进去了,而且也可以登陆了,详细问题就不继续说下去了,这样可以剞劂问题了,可以登陆,可以进后台添加修改删除了,这算是个小技巧吧,比较忙,没时间去好好的看,抽时间好好研究研究去,今天关于dede后台打开空白的解决办法就写道这了。

 

dedecms修改留言板模板实现和其他页面相同的布局

dedecms留言板,问答模块急会员空间模块都不支持dedecms的常用标签,如果用留言板或者问答的话修改起来很不方便,电商圈给大家介绍一种方法可以让这几个模块支持标签,不过是要懂一点PHP的知识修改最好,在修改以前请注意要先备份一下原来的文件,以便修改错误。步骤如下:? 第一步:打开”/include/common.func.php”,该文件5.6版本默认存在,5.5的不存在自己建一个。????? 然后在该文件中加入一个函数,代码如下:

function pasterTempletDiy($path)
{
require_once(DEDEINC."/arc.partview.class.php");
global $cfg_basedir,$cfg_templets_dir;
$tmpfile = $cfg_basedir.$cfg_templets_dir."/".$path;//模版文件的路径
$dtp = new PartView();
$dtp->SetTemplet($tmpfile);
$dtp->Display();
}

第二步,打开留言本的模版文件,默认的是/templets/plus/guestbook.htm用以下代码替换原因的调用头部代码

<?php
pasterTempletDiy("default/head.htm");
?>

调用尾部代码

<?php
pasterTempletDiy("default/foot.htm");
?>

空间和问答的方法都用第二步的方法即可。? 今天在修改搜索页面的时候涉及到调用几个文章点击量排行

制作中发现搜索页面是不支持这些标签的,于是在网上找了些说明文章
以下是解决办法:(测试正常)

include 引入一个文件

形式为:{dede:include file=’文件名称’ ismake=’是否为dede板块模板(yes/no)’/}
对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录

例如:搜索页面模板加入{dede:include file=’test.htm’ ismake=’yes’/}
dede默认模板路径? 新建一个test.htm文件
文件里面加入

{dede:arclist orderby=’click’? row=’8′ }
<li>[field:textlink/]</li>
{/dede:arclist}

其它不能使用arclist 标签的页面应该是同理可以使用的