Ecshop、Discuz! 等开源产品的局限

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Ecshop、Discuz! 等开源产品的局限 记得今年年初,我初次接触Discuz!和Ecshop时,一阵阵地惊叹:成熟度这么高的产品,居然是免费的。我们这些搞传统软件开发的要怎么活?另外也奇怪,做这些产品的公司,他们要怎么活? 我公司的网站,原型正好是用Ecshop和Discuz!,到开发方移交给我们后,我们做二次开发,深入了解了其代码,早期的疑惑才有了答案。

记得今年年初,我初次接触Discuz!和Ecshop时,一阵阵地惊叹:成熟度这么高的产品,居然是免费的。我们这些搞传统软件开发的要怎么活?另外也奇怪,做这些产品的公司,他们要怎么活?

我公司的网站,原型正好是用Ecshop和Discuz!,到开发方移交给我们后,我们做二次开发,深入了解了其代码,早期的疑惑才有了答案。

可以说,这些产品,都无法支持真正严肃的应用环境。

1)所有的数据库访问都不用mysqli连接,因此无法用prepared statement,而全部用拼接方式。

这些系统,对数据库(主要都是mysql)的访问,全部采用sql拼接方式。举一个Ecshop的例子:

   $w_openid = $db -> getOne("SELECT `wxid` FROM `wxch_user` WHERE `wxid` = '$openid'");

或类似

   $wxch_user_sql = "INSERT INTO `$thistable` ( `user_name`,`password`,`field3`,`field4`) VALUES ('$variable1','$variable2','value3','value4')";
   $db -> query($wxch_user_sql);

 

这种语句,偶尔出现倒也可以理解,如果所有的地方都是这样(正如Ecshop),则应该出于对数据库只有入门水平的人手里。因为他完全没有使用prepared statement的概念。

所以,这种系统几个人用应该是快如闪电,并发量一大,后台数据库可能被搅成一锅粥了。

正确的连接数据库的方法应该是:

 $mysqli = new mysqli("server", "username", "password", "database_name");

而不是

1
$conn = mysql_connect( 'server' , 'username' , 'password' or  die ( "数据连接错误!!!" );

 正确的sql语句应该是:

$stmt = $mysqli->prepare("INSERT INTO table (column) VALUES (?)");

$stmt->bind_param("s", $safe_variable);

$stmt->execute();

而不是前面那样。

 

2)系统安全性极差

因为不用prepared statement,只要编程人员不注意,sql injection可以说到处都有可能。但看看他们的代码,可以说压根不注意。因为这些系统,对用户输入几乎不用转义。

对于已经很烂的代码,正确的用法是应该有第二行:

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

但在这些系统里,上面的第二行很少看到。

这样造成的问题就是,针对这些系统的机器人极多。基本上你的论坛上线不久很快就被机器人发的水贴、广告贴盯上了。

 

本人对这些系统研究还很肤浅,不过看到这两条,就已经明白,这种系统是供学习用的。开发这些产品的公司,他们的水平很高,不过高质量的代码应该是用在了商业性收费的产品上。大家别以为可以捡到便宜。

 

转载请注明出处:cnblogs上的海边的骆驼博客。原博文地址:http://www.cnblogs.com/yingjiang/p/4750408.html 

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
安全 Linux PHP
轻松搭建Linux宝塔面板并实现公网访问Discuz论坛,让您的论坛更具吸引力
轻松搭建Linux宝塔面板并实现公网访问Discuz论坛,让您的论坛更具吸引力
|
7月前
|
Ubuntu Shell Linux
一键搭建SFroum开源论坛程序
SFroum是一款开源论坛程序,简化了站长的技术难度。官网位于<https://www.sforum.cn>,提供CSDN教程。由于Docker问题,一键安装脚本不可用,建议手动安装。适合Linux系统,如Debian和Ubuntu,最低配置为1核1G,推荐2核2G。安装涉及使用宝塔面板,安装Nginx,然后通过脚本安装论坛,如`ubuntu.sh`或`centos.sh`。安装后进行反代配置以绑定域名。安装完成后访问`/admin`进入后台。教程包含多步截图指导。
|
关系型数据库 MySQL Apache
Discuz贴吧建站的搭建及维护(windows系统)
Discuz贴吧建站的搭建及维护(windows系统)
229 0
|
8月前
|
PHP
HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)
HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)
187 2
|
存储 关系型数据库 MySQL
WordPress建站开发的核心文件详解
WordPress建站开发者有两个最重要的核心 WordPress 文件包括:wp-config.php、functions.php,北京六翼信息技术有限公司的技术开发工程师针对WordPress建站开发核心文件进行归纳和讲解。
WordPress建站开发的核心文件详解
|
存储 关系型数据库 MySQL
解锁成就,LNMP源码Discuz搭建论坛系统!
解锁成就,LNMP源码Discuz搭建论坛系统!
271 0
|
搜索推荐 前端开发 大数据
AEM、Sitecore、Sitefinity、Wordpress哪个更适合
内容管理系统(Content Management System,CMS),是一种位于WEB前端(Web 服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。随着个性化的发展,内容管理还辅助WEB前端将内容以个性化的方式提供给内容使用者,随着线上经济的火热,CMS平台已经成为企业发展线上经济必不可少的工具。
351 0
AEM、Sitecore、Sitefinity、Wordpress哪个更适合
|
数据库
Discuz如何开发关注功能(2)
Discuz如何开发关注功能
146 0
Discuz如何开发关注功能(2)
|
数据库
Discuz如何开发关注功能(1)
Discuz如何开发关注功能
281 0
Discuz如何开发关注功能(1)