为了提高系统的安全性,所有基于Dedecms的CMS系统都会设置验证码或验证问题。这种机制不仅可以防止黑客攻击,还能作为系统标准化的一个标志。虽然听起来有些夸张,但验证问题确实是系统不可或缺的一部分。在Dedecms CMS中,几乎所有用户提交的数据都需要通过验证码或验证问答进行安全处理。然而,在某些情况下,比如个人学习使用时,可能并不需要这些验证步骤。本文将详细介绍如何设置验证问题,并对其工作原理进行分析。
第一个问题是:如何移除验证码?这非常简单,只需进入后台的“系统 - 验证安全设置”页面,取消相关复选框即可。在这里你会发现,所有与验证相关的设置都集中在此,如下图所示。
Dedecms CMS后台的这一小功能主要用于配置验证选项。当我们选择或取消某个验证(例如会员投稿验证),点击保存后,注册会员发布内容时就无需填写验证码。如果取消验证问答,那么用户在会员中心发布内容时也不需要进行额外验证。
原理分析:
如上图所示,验证码参数设置中的所有内容在点击确定后会被提交到后缀文件dede/sys_safe.php中。在这个文件里,最核心的部分是以下三行代码:
$fp = fopen($safeconfigfile, "w") or die("写入文件 $safeconfigfile 失败,请检查权限!");
fwrite($fp, $configstr);
fclose($fp);
在这三行代码之前,所有提交的内容都会被处理并放入变量$configstr中。当执行到这三行代码时,首先会打开文件$safeconfigfile = data/safe/inc_safe_config.php,然后将我们在“验证码参数设置”中的所有配置写入inc_safe_config.php文件。这样,无论是在前台、后台还是其他地方,只要需要判断是否需要验证码,就可以通过检查inc_safe_config.php文件中的配置来实现。通常,这种判断会使用正则匹配系统函数preg_match(正则,字符串)完成。
让我们举一个例子来模拟这个过程,然后总结一下。
假设我们以会员投稿为例,当选择开启会员投稿验证并点击确认后,打开配置后的文件inc_safe_config.php,会发现第一行$safe_gdopen = '1,2,3,4,5,7';中的数字3代表会员投稿。这与后台的“验证码参数设置”一一对应。当safe_gdopen包含3时,表示开启了会员投稿时的验证;否则,验证不会显示。
现在进入会员中心,点击发布文章时,可以看到下面有了验证码,如下图所示。
进入文件article_add.htm,找到代码if(preg_match("/3/", $safe_gdopen)),正是这段代码决定了会员投稿时是否显示验证码功能。当我们在“验证码参数设置”中取消会员投稿后,前台会员投稿时的验证码就会消失。其他验证的原理与此相同。
总结:
设计配置文件时可以参考Dedecms CMS的方法。Dedecms CMS的所有配置方式都类似——先设计配置模板,然后编写一个PHP文件处理该模板接收到的参数,接着通过系统函数fopen()打开配置文件,使用fwrite写入这些参数,最后关闭文件。这样,当我们在后台配置完成后,就可以通过这三个系统函数实时写入操作,使配置文件与后台参数保持一致。这样,无论是在前台、后台还是其他地方,只需引入配置文件并判断相关值即可决定是否需要验证。
实际上,Dedecms CMS后台的所有配置,例如“系统 - 系统基本参数”中的设置,都是采用这种方式完成的。未来进行Dedecms CMS二次开发或自行开发系统框架时,可以参考这一小功能。