织梦geteditor漏洞如何利用与防御?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 织梦建站 正文

GetEditor 是什么?

GetEditor 是织梦CMS的一个自定义PHP函数,它的主要作用是生成一个富文本编辑器(也叫HTML编辑器)的HTML代码,当你调用这个函数时,它会根据系统配置,加载你指定的编辑器(如老版的 ckeditorfck,或者新版的 kindeditor),并将其渲染成一个可以输入和格式化文本的区域。

你在后台发布文章时看到那个可以加粗、斜体、插入图片的文本框,就是由 GetEditor 函数生成的。

函数定义与参数

你可以在织梦的 /include/helpers/editor.helper.php 文件中找到这个函数的定义,它的基本原型如下:

function GetEditor($fname, $value = '', $gtype = 'Basic', $width = '100%', $height = '400px', $ecms = 0)

参数详解:

  1. $fname (字符串, 必需): 编辑器的表单名称ID,这个值非常重要,因为提交表单时,服务器端就是通过这个 name 来获取编辑器内容的。

    • 在文章发布页,这个值通常是 body,因为文章内容保存在数据库的 body 字段。
  2. $value (字符串, 可选): 编辑器的,默认为空字符串,通常这里会传入文章已存在的 body 字段内容,用于编辑。

    • GetEditor('body', $arcRow['body'])
  3. $gtype (字符串, 可选): 编辑器的显示类型,这决定了编辑器工具栏的复杂程度。

    • 'Basic': 基础版,只有最常用的几个按钮。
    • 'Advanced': 高级版,功能更丰富,按钮更多。
    • 'Simple': 简化版,比基础版还少。
    • 这个参数是否有效,取决于你使用的具体编辑器。
  4. $width (字符串, 可选): 编辑器的宽度,可以是像素值(如 '700px')也可以是百分比(如 '100%'),默认为 '100%'

  5. $height (字符串, 可选): 编辑器的高度,通常是像素值(如 '400px'),默认为 '400px'

  6. $ecms (整型, 可选): 一个标志位,用于区分是内容发布还是其他用途。

    • 0: 普通用途。
    • 1: 在内容发布页面使用,这个参数会影响编辑器的一些初始化设置,比如是否开启特定功能。

如何使用 GetEditor

GetEditor 主要在两个地方被调用:

a) 在后台模板文件中调用

这是最常见的用法,织梦的后台页面都是通过模板文件来渲染的,文章编辑模板文件是 /dede/templets/article_edit.htm

在这个文件中,你会找到类似这样的代码:

<tr>
    <td height="24" colspan="2" bgcolor="#f7f7f7">
        <div style='padding-left:10px;'>
            <strong>内容摘要:</strong>
            <textarea name='description' id='description' style='width:100%; height:50px; margin:5px 0;'>{dede:field.description/}</textarea>
        </div>
    </td>
</tr>
<!-- ... 其他字段 ... -->
<tr>
    <td valign="top" bgcolor="#f7f7f7">
        <div style='padding-left:10px;'>
            <strong>详细内容:</strong>
            <textarea name="body" id="body" style="width:100%; height:400px; margin-top:5px;">
                {dede:field.body/}
            </textarea>
        </div>
    </td>
</tr>

注意: 在织梦V5.7及之后的版本中,GetEditor 的调用方式发生了变化,它不再是直接在模板里写 <?php GetEditor(...); ?>,而是通过一个JS函数 loadEditor() 来动态加载。

/dede/templets/article_edit.htm 的底部,你会看到这样的JS代码:

<script type="text/javascript">
    // 初始化编辑器
    function showEditor() {
        var editor = KindEditor.create('textarea[name="body"]', {
            uploadJson : '{dede:global.cfg_cmspath/}/include/dialog/select_images_post.php',
            allowImageRemote : false,
            allowFileManager : true,
            width: '100%',
            height: '400px',
            resizeType : 1,
        });
    }
    // 页面加载完成后执行
    window.onload = showEditor;
</script>

这里的 KindEditor.create('textarea[name="body"]', ...) GetEditor 的现代实现方式,它会在页面加载完成后,寻找 namebodytextarea 标签,然后将其替换成一个功能完整的 KindEditor 编辑器。{dede:field.body/} 这个标签会自动填充当前文章的正文内容到这个 textarea 中。

b) 在PHP文件中手动调用

如果你想在自己的开发模块中也使用织梦的编辑器,你可以直接在PHP文件中调用 GetEditor 函数。

示例:

假设你有一个自定义的表单提交页面 my_add.php,你想在里面加入一个编辑器。

  1. 确保你的PHP文件已经包含了织梦的核心文件:

    require_once(dirname(__FILE__)."/../include/common.inc.php");
  2. 在需要显示编辑器的地方,直接调用函数:

    <form action="save.php" method="post">
        <label>文章标题:</label>
        <input type="text" name="title" />
        <label>文章内容:</label>
        <?php
            // 调用GetEditor函数生成编辑器
            // 第一个参数 'my_content' 是编辑器的name/id
            // 第二个参数 '' 是初始内容,这里为空
            // 后面的参数使用默认值
            GetEditor('my_content', '', 'Basic', '100%', '350px');
        ?>
        <input type="submit" value="提交" />
    </form>
  3. 在处理提交的 save.php 文件中,你可以通过 $_POST['my_content'] 来获取编辑器里的HTML内容:

    <?php
        // save.php
        require_once(dirname(__FILE__)."/../include/common.inc.php");
        $content = $_POST['my_content']; // 获取编辑器内容
        // ... 进行数据处理和入库操作 ...
        echo "你提交的内容是:<br>";
        echo htmlspecialchars($content); // 输出获取到的内容
    ?>

更换编辑器

织梦CMS支持更换编辑器,如果你不喜欢默认的 KindEditor,想换成 CKEditor 或其他编辑器,可以按照以下步骤操作:

  1. 下载新编辑器:从官网下载编辑器的完整包(CKEditor)。
  2. 上传文件:将下载的编辑器文件包上传到织梦的 /include/ 目录下,并重命名一个简单的目录名,/include/ckeditor/
  3. 修改配置文件
    • 打开 /include/helpers/editor.helper.php 文件。
    • 找到 GetEditor 函数内部,根据你编辑器的类型,找到对应的代码块(通常会有 if($GLOBALS['cfg_html_editor']=='ckeditor') 这样的判断)。
    • 修改或添加调用新编辑器的代码,你需要参考新编辑器的官方文档,编写正确的初始化JS代码。
    • 关键一步:修改 /dede/sys_datacache.php 文件中的 GetEditorSet() 函数,或者直接在后台的“系统” -> “系统基本参数” -> “核心设置”里,找到 “默认编辑器” 选项,将其值改为你的新编辑器目录名(如 ckeditor)。
  4. 清理缓存:在后台清除所有缓存,使新配置生效。
特性 描述
核心功能 在后台动态生成富文本编辑器。
关键参数 $fname (表单名/ID) 和 $value (初始内容) 是最常用的。
使用场景 主要用于后台内容发布/编辑模板,也可在自定义PHP模块中调用。
现代实现 在新版织梦中,通常通过 KindEditor.create() 等JS函数实现,而非直接PHP调用,但原理和目的与 GetEditor 一致。
可扩展性 支持通过修改配置文件来更换或自定义编辑器。

理解 GetEditor 是进行织梦二次开发和维护后台功能的基础,它封装了编辑器加载的复杂性,让开发者可以非常方便地在表单中集成一个功能强大的文本编辑区域。

-- 展开阅读全文 --
头像
htaccess如何解决织梦网站安全问题?
« 上一篇 今天
全国计算机等级考试C语言真题怎么高效备考?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]