竟然遇见这个问题Safe Alert: Request Error step 1 !

时间: 2011-04-28 / 分类: dedecms / 浏览次数: 2,783 views / 0个评论 发表评论

今天给客户弄站,需要联合查询两个表
要用到union,我用了SQL标签去查询,结果不能运行
提示Safe Alert: Request Error step 1 !
一看到就知道是安全警告,也就是SQL语句里不能用union
主要是为了防止注入
但是我现在必须使用啊,怎么办呢?
有人提出可以
include下的dedesql.class.php找到如下构造函数
1. function __construct($pconnect=false,$nconnect=true)
2. {
3. $this->isClose = false;
4. $this->safeCheck = true;
5. if($nconnect)
6. {
7. $this->Init($pconnect);
8. }
9. }
把其中的$this->safeCheck = true;改为$this->safeCheck = false;
但是将“true”修改为false即可屏蔽掉安全检测。当然,这样存在一定的安全隐患

那么只能使用PHP标签了,直接写PHP语句
用 {dede:php} 标签进行完全的编程
下面就是我写的

{dede:php }

$sql_tag=”(SELECT aid,typeid,linkman,xiaoqu,fangxing,mianji,jiage,shijian,senddate FROM dede_addoninfos WHERE arcrank>=0 AND state=0 and typeid<>0) UNION (SELECT aid,typeid,linkman,xiaoqu,fangxing,mianji,jiage,shijian,senddate FROM dede_addoninfos9 WHERE arcrank>=0 AND state=0 and typeid<>0) ORDER BY aid desc LIMIT 10;”;

if(!isset($dsql)||!is_object($dsql)){
$dsql=new DedeSql(false);}
$dsql->safeCheck = false;
$dsql->SetQuery($sql_tag);
$dsql->Execute();
while($row=$dsql->GetArray()){
$url=GetOneArchive($row[‘aid’]);
$url[‘typeurl1’]=GetTypeUrl($row[‘typeid’],$url[‘typedir’],1,$defaultname=’index.html’,0,$namerule2='{typedir}/list_{tid}_{page}.html’,$moresite=0,$siteurl=”,$url[‘typedir’]);
echo “ “.$url[‘typename’].”“;
echo “ “.$row[‘linkman’].”“;
echo “ “.$row[‘xiaoqu’].”“;
echo “ “.$row[‘fangxing’].”“;
echo “ “.$row[‘mianji’].”“;
echo “ “.$row[‘jiage’].”“;
echo “ “.$row[‘shijian’].”“;
echo “ “.MyDate(‘y-m-d’,$row[‘senddate’]).”“;
}
{/dede:php}
其中的$dsql->safeCheck = false; 就是把检测关掉了
测试通过

发表评论

你必须 登录后 才能留言!