ZenCart的漏洞和它一样流行.但是因特网上还是有N多的站没有升级,即使有补丁发布,那些漏洞依然大门敞开,再好的系统管理员也无用,因为后门总是开着啊.
今天碰到这样的一个问题
在新产生新订单时,magento后台没有发确认信。我直接的反应是不可能啊,因为一直都很正常啊,而且没有修改过代码?仔细一想,还有一个可以肯 定就是昨天有收到一封邮件,一个客户说收到了新订单确认邮件,但是没有进入付款页面。所以这就有茅盾。进一步确认是magento网站的contact us可以发出邮件。
查看mailog发现服务器在发大量的邮件。怀疑服务器让人利用发垃圾邮件,首先想到的是zen cart网站。查看apache的日志,确认发现有对zen cart的tell-a-friend页面的大量访问量。
关闭sendmail 清空 /var/spool/mqueue /var/spool/clientqueue 将发垃圾邮件的IP从apache的access log中提取,暂时用iptable规则drop掉所来息这几个IP的的请求 启动sendmail 最重要的是如何完全的zen cart的给朋友发邮件推荐产品的功能彻底关闭掉
首先,关闭掉所有产品页面的"tell a friend”按钮 菜单Catalog 子菜单 Product Types 点击 Edit Layout 按钮 在页面中选择 Show Product Tell A Friend Button 这个选项编辑,修改为 false然后单击 update 保存
其次,关闭掉所有的"tell a friend”的sidebox 选项菜单Tools 子菜单 Layout Box Controller,在页面中找到 "sideboxes/tell_a_friend.php",选中所有的off,保存
这其实还不够,知道地址的人还是可以进入到发邮件的页面。所以,要在代码中禁用发邮件的功能。这不可能,因为发邮件的功能还是要用的。那什么办?有两个选项:
1,利用zen cart自带的配置机制,但是在后台是无法做到的,我是在查看代码之后看注释看到的 我用grep -r 'mail(' includes搜索php的mail函数,找到文件 includes/functions/functions_email.php,看到这段代码 ... ...
/** ... ...
// ignore sending emails for any of the following pages
// check for injection attempts. If new-line characters found in header fields, simply fail to send the message ... ... 我先是看到$module参数,虽然注释说是为了调用模板之用,但是我想即使zen cart没做,我们自己要修改也应该是要利用这个参数来实现。但是从 (The EMAIL_MODULES_TO_SKIP constant can be defined in a new file in the "extra_configures" folder) 表明,我们只要在extra_configures目录下定义一个EMAIL_MODULES_TO_SKIP这个常量就OK了,我是这样做的:
define('EMAIL_MODULES_TO_SKIP', 'tell_a_friend,tell_a_friend_extra');
不过,在我测试的这个版本中,1.3.8中即使这样设置后,也会提示发送成功,但是其实是没有发送的。
另外一种方法就是禁止对tell_a_friend页面的请求,或者通过mod_rewrite将对这个页面的请求重定向到产品页或首页。 (责任编辑:好模板) |