espcms内容页上下篇按后台手动排序号

本文介绍了一种PHP中用于优化文档列表展示的方法,通过调整排序逻辑来实现更高效的上下篇文档链接生成。此方法涉及数据库查询优化及模板标签的使用。

模板文件:

{%get name=plist class="did":$read.did,pid:$read.pid%}
<li class="fl">{%if $read.ctitle!=''%}上一篇:<a class="infolist2" title="{%$read.title%}" href="{%$read.link%}">{%$read.ctitle%}</a>{%/if%}</li>
{%/get%}
{%get name=plist class="did":$read.did,pid:$read.pid,class:1%}
<li class="fr">{%if $read.ctitle!=''%}下一篇:<a class="infolist2" title="{%$read.title%}" href="{%$read.link%}">{%$read.ctitle%}</a>{%/if%}</li>
{%/get%}

 

修改php文件:
/interface/lib_plist.php

增加17行
$pid = intval($para['pid']);//print($pid);
修改28行:
//先按pid排序查询,如果都相同则按did查询。先按pid排序,如果都相同则按did排序
if ($class) {
  $sql = "SELECT * FROM $db_table WHERE isclass=1 AND tid = $read[tid] AND (pid > $pid or (pid = $pid and did > $did)) ORDER BY pid ASC, did ASC LIMIT 0,1";
} else {
  $sql = "SELECT * FROM $db_table WHERE isclass=1 AND tid = $read[tid] AND (pid < $pid or (pid = $pid and did < $did)) ORDER BY pid DESC, did DESC LIMIT 0,1";
}

 

 

/interface/lib_plist.php

 1 <?php
 2 
 3 
 4 
 5 class lib_plist extends connector {
 6 
 7     function lib_plist() {
 8         $this->softbase();
 9         parent::start_pagetemplate();
10         $this->pagetemplate->libfile = true;
11     }
12     function call_plist($lng, $para, $filename = 'plist', $outHTML = null) {
13         $para = $this->fun->array_getvalue($para);
14         $lngpack = $lng ? $lng : $this->CON['is_lancode'];
15         $lng = ($lng == 'big5') ? $this->CON['is_lancode'] : $lng;
16         include admin_ROOT . 'datacache/' . $lng . '_pack.php';
17         $did = intval($para['did']);//print($did);
18         $pid = intval($para['pid']);//print($pid);
19         if (empty($did)) {
20             return false;
21         }
22         $class = intval($para['class']);
23         $class = empty($class) ? 0 : $class;
24         $db_table = db_prefix . 'document';
25         $read = $this->get_documentview($did);
26         if (!$read['tid']) {
27             return false;
28         }
29         //先按pid排序查询,如果都相同则按did查询。先按pid排序,如果都相同则按did排序
30         if ($class) {
31             $sql = "SELECT * FROM $db_table WHERE isclass=1 AND tid = $read[tid] AND (pid > $pid or (pid = $pid and did > $did)) ORDER BY pid ASC, did ASC LIMIT 0,1";
32         } else {
33             $sql = "SELECT * FROM $db_table WHERE isclass=1 AND tid = $read[tid] AND (pid < $pid or (pid = $pid and did < $did)) ORDER BY pid DESC, did DESC LIMIT 0,1";
34         }
35         $rslist = $this->db->fetch_first($sql);
36         if (is_array($rslist)) {
37             $typeread = $this->get_type($rslist['tid']);
38             $rslist['typename'] = $typeread['typename'];
39             $rslist['typelink'] = $this->get_link('type', $typeread, $lngpack);
40             $rslist['pageclass'] = $typeread['pageclass'];
41 
42             $rslist['link'] = $this->get_link('doc', $rslist, $lngpack);
43             $rslist['buylink'] = $this->get_link('buylink', $rslist, $lngpack);
44             $rsList['enqlink'] = $this->get_link('enqlink', $rsList, $lngpack);
45             $rslist['ctitle'] = empty($rslist['color']) ? $rslist['title'] : "<font color='" . $rslist['color'] . "'>" . $rslist['title'] . "</font>";
46         }
47         $this->pagetemplate->assign('read', $rslist);
48         $this->pagetemplate->assign('lng', $lng);
49         $this->pagetemplate->assign('lngpack', $LANPACK);
50         if (!empty($outHTML)) {
51             $output = $this->pagetemplate->fetch(null, null, $outHTML);
52         } else {
53             $output = $this->pagetemplate->fetch($lng . '/lib/' . $filename);
54         }
55         return $output;
56     }
57 
58 }

 

<think>嗯,用户想查找espcms系统中与搜索注入相关且涉及admin页面的内容。用户提到"搜索注入"和"admin页面",但根据提供的引用,漏洞主要在后台的citylist.php文件,属于城市列表功能而非搜索功能。 用户可能混淆了"查询"和"搜索"的概念。引用中多次出现的漏洞是/adminsoft/index.php?archive=citylist这个路径的parentid参数注入,本质是SQL查询中的整形注入,并非全文搜索功能。引用[1][2][4][5]都明确指出漏洞发生在citylist.php文件的parentid参数处理上,引用[3]展示的updatexml注入则与当前漏洞无关。 需要帮用户明确三个关键点: 1) 漏洞位置:后台的城市管理模块(citylist),参数是parentid 2) 漏洞类型:数字型SQL注入,因未对$parentid做intval转换 3) 利用特征:构造union select注入payload,如引用[2]的"-1 union select 1,2,database(),4,5" 考虑到用户可能真正关心后台注入漏洞的利用方式,准备整理复现步骤: - 入口:/adminsoft/index.php?archive=citylist&action=citylist - 关键参数:parentid(需保持其他必选参数有效性) - 利用示例:引用[2]的payload可获取数据库名 另外要提醒用户:引用[5]显示的var_dump($sql)是调试代码,实际漏洞环境不会输出SQL语句。引用[4]强调的daddslashes函数绕过问题也值得注意——该CMS的全局过滤对数字参数无效。 最后考虑区分"搜索注入"的可能性:如果用户坚持找搜索功能漏洞,需要说明当前引用未涉及,但可以检查其他接受关键词的admin页面是否同样缺失过滤。 </think>根据引用内容,**ESPCM5.7.13 后台存在 SQL 注入漏洞**,主要集中在城市管理模块(`citylist.php`),以下是关键信息及解决方案: --- ### **漏洞详情** 1. **漏洞位置** - 文件路径:`adminsoft/control/citylist.php` - 参数:`parentid`(整形注入) - 漏洞代码(引用[4][5]): ```php $parentid = $this->fun->accept('parentid', 'R'); $parentid = empty($parentid) ? 1 : $parentid; // 未对$parentid强制类型转换 $sql = "select * from $db_table where parentid=$parentid"; // 直接拼接SQL ``` > **问题**:`$parentid` 未用 `intval()` 过滤,攻击者可通过负值构造联合查询注入。 2. **漏洞复现** - **Payload**(引用[2]): ``` /adminsoft/index.php?archive=citylist&action=citylist&parentid=-1 union select 1,2,database(),4,5 ``` - **结果**:返回数据库名等敏感信息(如 `database()` 结果)。 3. **注入类型** - **数字型注入**:因 `parentid` 预期为整数,但未强制转换类型,导致可执行恶意 SQL。 --- ### **解决方案** 1. **代码修复**(引用[5]): 在接收参数后强制转换为整数: ```php $parentid = empty($parentid) ? 1 : intval($parentid); // 修复后 $verid = empty($verid) ? 0 : intval($verid); // 同逻辑修复 ``` > 修复后,非数字输入会被转换为 `0` 或默认值,阻断注入。 2. **临时防护** - 禁用后台 `/adminsoft/index.php?archive=citylist` 的公开访问; - 对传入的 `parentid` 参数添加正则过滤(如只允许数字)。 --- ### **漏洞利用限制** - **需后台权限**:漏洞触发路径在管理后台 (`adminsoft/`),攻击者需先获取管理员凭证[^1][^2]。 - **影响版本**:确认影响 ESPCMS 5.7.13,其他版本需验证。 --- ### **拓展漏洞(引用[3])** 若系统存在 **UPDATE 注入**(如用户管理模块),可利用报错注入: ```sql UPDATE users SET passwd='...' WHERE id=1 AND updatexml(1,concat(0x7e,version()),1) ``` > 通过错误回显获取数据库信息,但此漏洞未在 ESPCMS 引用中明确复现。 --- ### **审计建议** 1. 全局搜索 `accept('...','R')` 或 `$_REQUEST` 接收的参数,检查是否强制类型转换; 2. 重点审查 SQL 语句拼接位置(尤其是数字参数); 3. 使用 Seay 等工具自动化检测未过滤的数据库操作[^4][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值