友点企业网站管理系统(YouDianCMS)是一款集电脑站、手机站、微信、APP、小程序于一体的开源五站合一企业建站解决方案。其使用PHP开发,以其操作简单、功能强大、稳定性好、易扩展、安全性强、维护方便等特点,被广泛应用于企业网站建设。然而,该系统在实现过程中存在潜在的安全风险,如SQL注入漏洞。在友点CMS系统中,存在一个直接赋值的变量,主要在`App/Lib/Action/HomeBaseAction.class.php`文件中。如果GET请求中传递了一个`fu`参数,该参数值会被赋值给`cookie`方法,并随后添加前缀,最终赋值给`youdianfu`变量。这一过程允许开发人员在特定条件下控制`$this->_fromUser`变量的值。通过控制`youdianfu`变量,攻击者可以尝试注入SQL代码。主要的注入尝试发生在`App/Lib/Action/Home/ChannelAction.class.php`文件中的`voteAdd`方法。在该方法中,`$this->_fromUser`变量的值被检测和使用。攻击者可以通过设置`cookie`值,绕过一些基本的验证流程,进而触发SQL查询。在`App/Lib/Model/Admin/WxVoteModel.class.php`文件中,`$fromUser`值被存入`$where`数组,并通过`$this->where`方法集成到SQL查询中。尽管友点CMS系统使用了ThinkPHP3框架,该框架在某些版本中存在SQL注入风险,且未实施有效的防御机制,如`I()`函数。在执行SQL查询时,`$where`数组的内容直接被拼接到SQL语句中,为攻击者提供了一条注入路径。在`App/Core/Lib/Core/Db.class.php`文件中的`buildSelectSql`和`parseSql`方法中,SQL语句的构建和解析过程允许不安全的输入直接参与查询逻辑,从而可能导致SQL注入。对于攻击者而言,SQL注入攻击的实现方式多样,通常需要定位使用可控制变量进行SQL查询的代码段。在友点CMS系统中,只要调用包含`$this->_fromUser`变量的`where`方法的代码块,理论上都可能存在注入风险。因此,CMS系统中与`$this->_fromUser`相关的多个功能模块都可能成为攻击目标。总结起来,友点CMS系统中的安全漏洞主要源于其使用的框架存在已知的漏洞,以及系统中存在可控的变量。这为代码审计提供了重要启示:应重点关注通过Cookie控制的变量,因为这类变量的防护往往较弱。此外,积累不同框架的漏洞知识也是防范此类安全问题的关键,因为随时可能遇到利用这些漏洞的攻击尝试。在实际应用中,加强代码审查、更新到最新安全版本的框架、实施输入验证和输出清理等措施,都是有效防范SQL注入攻击的重要手段。