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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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 

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
安全 Linux PHP
轻松搭建Linux宝塔面板并实现公网访问Discuz论坛,让您的论坛更具吸引力
轻松搭建Linux宝塔面板并实现公网访问Discuz论坛,让您的论坛更具吸引力
|
6月前
|
PHP
HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)
HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)
170 2
|
存储 关系型数据库 MySQL
解锁成就,LNMP源码Discuz搭建论坛系统!
解锁成就,LNMP源码Discuz搭建论坛系统!
262 0
|
数据库
Discuz如何开发关注功能(1)
Discuz如何开发关注功能
278 0
Discuz如何开发关注功能(1)
|
数据库
Discuz如何开发关注功能(2)
Discuz如何开发关注功能
140 0
Discuz如何开发关注功能(2)
|
关系型数据库 MySQL Linux
如何使用Linux云服务器搭建Magento电子商务网站
如何使用Linux云服务器搭建Magento电子商务网站
1139 0
|
前端开发 UED
建站利器 | 阿里巴巴上线静态开源站点搭建工具 Docsite
近日,阿里巴巴在Github上线了静态开源站点搭建工具Docsite,这是一款集官网、文档、博客和社区为一体的静态开源站点的解决方案,具有简单易上手、上手不撒手的特质,同时支持react和静态渲染、PC端和移动端、支持中英文国际化、SEO、markdown文档、全局站点搜索、站点风格自定义、页面自定义等功能,借助Docsite,可以极大的提高前端工程师搭建静态开源站点的效率。
5225 0
|
弹性计算 关系型数据库 PHP
快速搭建phpwind论坛系统
phpwind 是采用 PHP + MySQL 方式运行的开源社区程序。轻架构,高效率简易开发,帮助您快速搭建并轻松管理社区站点。本文介绍如何使用云市场的 PHPWind论坛系统(含智慧云虚机面板) 快速搭建论坛。
15255 0
|
新零售 云计算 UED
阿里云 MVP技术直播——缪政辉教你如何搭建万能LNMP环境
阿里云 MVP 缪政辉开直播咯!快把这个好消息告诉你身边热爱技术,喜欢云计算的同学! 缪政辉是谁? 网名妙正灰,真名和网名读法一致。阿里云第三季新晋MVP,电商在读大学生。云计算领域罕见的文科生,喜欢云计算是因为新时代的电商需要云计算来驱动呀!据说他的愿景是让云计算的入门门槛更低和让电商变得触手可及,侧面来讲也就是说要让电商专业变得越来越难学哈哈!来一睹主播风采: ​ 缪政辉的直播讲什么? 这次直播缪政辉将分享如何在 ECS或者轻量应用服务器上使用,Ubuntu 搭建一个高性能、便捷、自由的 LNMP 环境。
2604 0
下一篇
无影云桌面