朋友的Discuz论坛在2015年7月-10月期间修改论坛帖子,在每个帖子的末尾插入了非法内容(下方第1种),2016年7月14-16日期间修改论坛帖子,在每个帖子的末尾插入了非法内容(下方第2种)。内容从数据库中查询得到如下:
- [b][url] [img] www.xxxxx.com [/img] [size=6][color=Blue]非法内容介绍[/color][/size] [/url][/b]
- <meta http-equiv="refresh" content="0; url=http://xxxxx.com">[b][url] [img] www.xxxxx.com [/img] [size=6][color=Red]非法内容介绍[/color][/size] [/url][/b]
第一种内容只是一个红色大字体的链接,需要用户点击,第二种内容更加BT,会直接跳转到目标非法网站。因为帖子是被修改的,所以非常隐蔽,而很多通过搜索引擎进入网站的用户会被一瞬间导入到非法网站……
观察了一下上方2条非法内容中均包含的字符串,就可以在mysql数据库中查询到有多少帖子被修改了:SELECT count(*) FROM `pre_forum_post` WHERE `message` LIKE '%[b][url] [img]%'
因为非法内容这个区域的字符是杂乱无章并且加了一些特殊字符,为了有效清除这些非法信息。我写了个PHP小程序,具体如下:
- config.php 数据库连接信息配置文件
- dz_clear_link_cmd.php 通过windows或者linux命令行下执行的
- dz_clear_link_web.php 通过网页访问形式执行的
本小程序用于清除插入到discuz论坛帖子内容末尾的垃圾信息
本程序基于GBK编码设置,如果你的论坛程序是UTF-8可能会存在问题。
1. 打开config,编辑数据库信息
2. 把3个php文件上传到网站根目录下
3. 访问http://网站地址/dz_clear_link_web.php 输入帖子pid号进行清除
找帖子pid号的方法:
a. 找到有问题帖子,点击“回复”,找到链接中的reppost=1153981,这个1153981就是这个帖子的pid
b. 用phpmyadmin登陆数据库后搜索非法信息,找到帖子pid
如果你使用的是独立主机(windows或者linux系统),在1和2这两步的基础上,在windows命令行下或者linux的终端界面下执行dz_clear_link_cmd.php程序,格式为:
php dz_clear_link_cmd.php 帖子pid号
这样也可以清除帖子中的垃圾信息
dz_clear_link.zip
适用于帝国CMS6.0以上版本,支持各编码版本。
来源:http://bbs.phome.net/ShowThread/?threadid=197874&forumid=31
因为官方网站下载这个插件需要登录,所以……
把下面代码保存为resetuser.php文件放在/e/update/目录下。
<?php
define('EmpireCMSAdmin','1');
$ecms_config=array();
$do_loginauth='';
require('../class/connect.php');
require('../class/db_sql.php');
require('../class/functions.php');
$link=db_connect();
$empire=new mysqlquery();
//------- 插件参数设置开始 -----
//进入重置页面密码
$pagepassword='123456';
//------- 插件参数设置结束 -----
@header('Content-Type: text/html; charset=gb2312');
//重置密码
function user_ResetUser($add){
global $empire,$dbtbpre;
user_CheckGotoPagePass();
$userid=(int)$add['userid'];
$password=RepPostVar($add['password']);
if(!$userid||!$password||!$add['repassword'])
{
printerror2('请输入重置的新密码','');
}
if($password<>$add['repassword'])
{
printerror2('两次输入的密码不一致','');
}
if(strlen($password)<6)
{
printerror2('密码不能少于6位','');
}
if(function_exists('DoEmpireCMSAdminPassword'))
{
$salt=make_password(8);
$salt2=make_password(20);
$password=DoEmpireCMSAdminPassword($password,$salt,$salt2);
$a="password='$password',salt='$salt',salt2='$salt2'";
}
else
{
$salt=make_password(8);
$password=md5(md5($password).$salt);
$a="password='$password',salt='$salt'";
}
$sql=$empire->query("update {$dbtbpre}enewsuser set ".$a." where userid='$userid'");
if($add['noquestion']==1)
{
$addsql=$empire->query("update {$dbtbpre}enewsuseradd set equestion='0',eanswer='' where userid='$userid'");
}
echo"<script>self.location.href='resetuser.php?ecms=success';</script>";
exit();
}
//返回用户列表
function user_ReturnUserlist(){
global $empire,$dbtbpre;
$users='';
$sql=$empire->query("select userid,username from {$dbtbpre}enewsuser");
while($r=$empire->fetch($sql))
{
$users.="<option value='".$r[userid]."'>".$r[username]."</option>";
}
return $users;
}
//登陆验证
function user_GotoPagePassword($ckpassword){
global $pagepassword;
if($pagepassword<>$ckpassword)
{
printerror2('页面密码错误','');
}
@setcookie('ckecmspagepass',md5($ckpassword));
echo"<script>self.location.href='resetuser.php?ecms=resetpage';</script>";
exit();
}
//验证信息
function user_CheckGotoPagePass(){
global $pagepassword;
if(md5($pagepassword)<>$_COOKIE['ckecmspagepass'])
{
printerror2('您还未验证权限','resetuser.php');
}
}
$ecms=$_POST['ecms'];
if(empty($ecms))
{
$ecms=$_GET['ecms'];
}
if($ecms=='GotoPagePassword')//登陆验证
{
user_GotoPagePassword($_POST['ckpassword']);
}
elseif($ecms=='ResetUser')//重置密码
{
user_ResetUser($_POST);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>重置管理员密码</title>
<style>
a { text-decoration: none; color: #002280 }
a:hover { text-decoration: underline }
body { font-size: 10pt; }
table { font-size: 10pt; color: #000000 }
</style>
<script>
function CheckUserInfo(obj){
if(obj.userid.value=='')
{
alert('请选择要重置的用户');
obj.userid.focus();
return false;
}
if(obj.password.value=='')
{
alert('请输入重置的新密码');
obj.password.focus();
return false;
}
if(obj.password.value!=obj.repassword.value)
{
alert('两次输入的密码不一致');
obj.password.focus();
return false;
}
if(obj.password.value.length<6)
{
alert('密码不能少于6位');
obj.password.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<br>
<br>
<br>
<?php
if($ecms=='success')
{
user_CheckGotoPagePass();
?>
<table width="600" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#4FB4DE">
<tr>
<td height="30"><div align="center"><strong><font color="#FFFFFF">已完成重置</font></strong></div></td>
</tr>
<tr>
<td height="120" bgcolor="#FFFFFF">
<div align="center"><font color="#FF0000"><strong>恭喜!密码重置完毕,现在您可以用新的密码登陆后台了。</strong><br>
<br>
<br>
</font>(友情提示:建议马上删除 /e/update/resetuser.php 文件,防止被重复使用。) </div></td>
</tr>
</table>
<?php
}
elseif($ecms=='resetpage')
{
user_CheckGotoPagePass();
?>
<form name="reseteform" method="post" action="resetuser.php" onsubmit="return CheckUserInfo(document.reseteform);">
<table width="500" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#4FB4DE">
<tr>
<td height="30" colspan="2"><strong><font color="#FFFFFF">重置管理员密码:</font></strong></td>
</tr>
<tr>
<td width="146" height="25" bgcolor="#FFFFFF">用户:</td>
<td width="339" bgcolor="#FFFFFF"><select name="userid" id="userid">
<?=user_ReturnUserlist()?>
</select></td>
</tr>
<tr>
<td height="25" bgcolor="#FFFFFF">新密码:</td>
<td bgcolor="#FFFFFF"><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td height="25" bgcolor="#FFFFFF">重复新密码:</td>
<td bgcolor="#FFFFFF"><input name="repassword" type="password" id="repassword"></td>
</tr>
<tr>
<td height="25" bgcolor="#FFFFFF">安全问题设为空:</td>
<td bgcolor="#FFFFFF"><input name="noquestion" type="checkbox" id="noquestion" value="1" checked>
清空安全问题</td>
</tr>
<tr>
<td height="25" bgcolor="#FFFFFF">当前认证码为:</td>
<td bgcolor="#FFFFFF"><?=$do_loginauth?$do_loginauth:$ecms_config['esafe']['loginauth']?></td>
</tr>
<tr>
<td height="25" bgcolor="#FFFFFF"> </td>
<td bgcolor="#FFFFFF"><input type="submit" name="Submit" value="马上重置登录信息">
<input name="ecms" type="hidden" id="ecms" value="ResetUser"></td>
</tr>
<tr>
<td height="25" colspan="2" bgcolor="#FFFFFF"><font color="#666666">说明:密码设置6位以上,且密码不能包含:$
& * # < > ' " / \ % ; 空格</font></td>
</tr>
</table>
</form>
<?php
}
else
{
?>
<form name="loginform" method="post" action="resetuser.php">
<table width="500" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#4FB4DE">
<tr>
<td height="30" colspan="2"><strong><font color="#FFFFFF">进入重置页面密码:</font></strong></td>
</tr>
<tr>
<td width="146" height="25" bgcolor="#FFFFFF">输入密码:</td>
<td width="339" bgcolor="#FFFFFF"><input name="ckpassword" type="password" id="password"></td>
</tr>
<tr>
<td height="25" bgcolor="#FFFFFF"> </td>
<td bgcolor="#FFFFFF"><input type="submit" name="Submit2" value="进入重置登录页面">
<input name="ecms" type="hidden" id="ecms" value="GotoPagePassword"></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
<?php
db_close();
$empire=null;
?>