存档

2008年10月 的存档

开源网店系统之比较

2008年10月31日

开源社区里有很多在线商店软件,从osCommerce到Zen Cart,再到CubeCart,令人眼花缭乱,无从选择。 

我的建议是,在你进行选择之前,一定要明确你偏重于哪些特性,是安装配置简单,还是扩展方便,是部署一个独立的在线商店,还是希望与其它开源系统集成,如客户关系管理软件SugarCRM,内容管理里系统Mambo,同时中文化问题也是中国用户需要注意的一个问题。

osCommerce号称最好的开源在线商店软件,并不为过,它也是其它开源在线商店软件的鼻祖,如Zen Cart。目前从国内来看,它具有最多的客户群,也有全面的中文技术文档以及技术支持。国内的论坛也很活跃,但是不幸的是,该项目很不活跃,看起来似乎在慢慢死去。该系统目前最新的版本是v2.2(里程碑2),发布于2003年7月左右。v2.2(里程碑3)的发布让人期待,但是开发进度太慢,从该项目的主页上看,似乎只有两位开发人员在上面工作。为什么当初辉煌一时的开源软件,会变成这种状态呢?答案只有一个,糟糕的系统设计。技术人员很难在osCommerce上作二次开发,维护起来也很费劲。很多衍生出的软件,如Zen Cart,就是对它重新设计,而取得了巨大成功。

对于Zen Cart,它的代码基于osCommerce,数据表结构基本一样,但是更容易使用,更容易定制,更容易扩展,因为“青出于蓝而胜于蓝”。该项目目前非常活跃,论坛的响应速度也很快。

CubeCart是一个全新的开源软件,但是它在易用性,以及安全性上与osCommerce和Zen Cart还有很大差距,需要更多的努力。因此,如果要在Zen Cart和CubeCart中做选择的话,我会毫不犹豫地推荐Zen Cart。

因此,开源在线商店软件的选择变成了osCommerce和Zen Cart的取舍问题。

从开源解决方案的角度,我更倾向于osCommerce。因为许多其它的开源软件为osCommerce提供了很好的集成。比如,SugarCRM,这是目前最流行的客户关系管理软件,SugarCRM社区里的一个子项目,就提供了osCommerce与SugarCRM的良好集成。至少目前为止,还没有针对Zen Cart的相关开源项目。同时,国内提供osCommerce主机托管的服务商较多,也很容易获得技术支持。所有,osCommerce是开源解决方案中的一个不可缺少的软件。

如果只是部署一个独立的在线商店,Zen Cart的功能优于osCommerce,就是没有技术背景的人员,也可轻松地安装,配置,以及定制界面,但是osCommerce却很难做到这些。

更多资源
Zen Cart论坛上的一篇比较文章,极具价值
http://www.zen-cart.com/modules/ipb/index.php?showtopic=27653

难得一见的关于osCommerce的负面评论,但很中肯。
http://www.deminy.net/blog/archives/3002-y.html

osCommerce的路线图,让人感觉前途渺茫
http://www.oscommerce.com/community/roadmap

osCommerce中文技术支持网站
http://www.oscommerce-cn.com

VN:F [1.9.22_1171]
Rating: 3.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

电子商务

Windows下如何查看端口被占用

2008年10月31日

 

在windows下调试php经常碰到apache启动端口被占用的问题,可能有flashget, 迅雷等占用端口,我们如何查看是哪些程序占用了端口呢?

C:Usersinetdemon>netstat -nao|find "0.0.0.0:80"
Local Address Foreign Address State PID TCP
TCP 0.0.0.0:80 Pacers:0 LISTENING 1144

用tasklist的FILTER,我们可以很快找到这个进程:

C:Usersinetdemon>tasklist /FI "PID eq 1144"
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
Skype.exe 1144 Console 1 24,056 K
经常占用80端口的软件一览:

  • Skype
  • Web迅雷
  • PPLive(可能是pp.tv,我懒得管了)
  • 傲游浏览器自动更新
  • 迅雷默认的BT上传端口(网友补充)
  • fs2you网盘(网友补充)
  • Cisco IP Communicator(网友补充)
  • QQMusic(网友补充)
  • fs2you
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

软件和工具

Zend Session使用要点

2008年10月16日

在Zend_Session使用中需要注意以下几点

1. 关闭PHP的 session.auto_start setting. 在php.ini, 或者 .htaccess中写:
php_value session.auto_start 0

2.不要直接使用session_start() 和Zend_Session_Namespace有冲突。

3.简单方法:可以直接new一个Zend_Session_Namespace,但是这种方法需要注意不要在此代码之前输出header.

4.麻烦但是不容易出问题的方法:使用Zend_Session::setOptions() 设置为strict, 防止自动自动zend session;在bootstrap中根据具体的action的需要,启动Zend_Session::start(),然后在action中new Zend_Session_Namespace。

VN:F [1.9.22_1171]
Rating: 5.7/10 (3 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

程序开发

强制使用https的apache设置

2008年10月11日
强制使用https的apache设置已关闭评论

如果我们有一个域,比如login.abc.com, 这个域我们同时接受http和https协议,但是我们希望将http协议的用户重定向到https,可以有两种做法,一种是在代码中进行重定向,zf的代码如下:

class Common_Helper_ForceHTTPS extends Zend_Controller_Action_Helper_Abstract {
  public function direct() {
    if (! isset ( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS']) {
      $request = $this->getRequest ();
      $url = 'https://' . $_SERVER ['HTTP_HOST'] . $request->getRequestUri ();
      $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper ( 'redirector' );
      $redirector->gotoUrl ( $url );
    }
  }
}

还有一种是进行apache配置,由于apache的配置是c代码,效率较高,我们建议用apache的配置来实现。
<IfModule mod_rewrite.c>
    RewriteEngine on
    Options +FollowSymLinks
    RewriteBase /   
RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d   
    RewriteRule ^(.*)$ index.php/$1
   
    RewriteCond $1 !^(index.php|img|css|js|secure_checkout|common_funcs.js|robots.txt)
    RewriteCond %{SERVER_PORT} 80
    RewriteRule /secure_checkout(.*)$ https://www.myURL.com/secure_checkout/$1
</IfModule>
RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d   
    RewriteRule ^(.*)$ index.php/$1
   
    RewriteCond $1 !^(index.php|img|css|js|secure_checkout|common_funcs.js|robots.txt)
    RewriteCond %{SERVER_PORT} 80
    RewriteRule /secure_checkout(.*)$ https://www.myURL.com/secure_checkout/$1
</IfModule>

VN:F [1.9.22_1171]
Rating: 9.5/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

程序开发 , ,

PHP安全防范

2008年10月7日

PHP代码安全和XSS,SQL注入等对于各类网站的安全非常中用,尤其是UGC(User Generated Content)网站,论坛和电子商务网站,常常是XSS和SQL注入的重灾区。这里简单介绍一些基本编程要点, 相对系统安全来说,php安全防范更多要求编程人员对用户输入的各种参数能更细心.

php编译过程中的安全

建议安装Suhosin补丁,必装安全补丁

php.ini安全设置

register_global = off
magic_quotes_gpc = off
display_error = off
log_error = on
# allow_url_fopen = off
expose_php = off
open_basedir =
safe_mode = on
disable_function = exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source,get_cfg_var
safe_mode_include_dir =

DB SQL预处理

mysql_real_escape_string (很多PHPer仍在依靠addslashes防止SQL注入,但是这种方式对中文编码仍然是有问题的。addslashes的问题在于黑客可以用0xbf27来代替单引号,GBK编码中0xbf27不是一个合法字符,因此addslashes只是将0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,具体见这篇文章)。用mysql_real_escape_string函数也需要指定正确的字符集,否则依然可能有问题。
prepare + execute(PDO)
ZendFramework可以用DB类的quote或者quoteInto, 这两个方法是根据各种数据库实施不用方法的,不会像mysql_real_escape_string只能用于mysql

用户输入的处理

无需保留HTML标签的可以用以下方法

strip_tags, 删除string中所有html标签
htmlspecialchars,只对”<”,”>”,”;”,”’”字符进行转义
htmlentities,对所有html进行转义

必须保留HTML标签情况下可以考虑以下工具:
HTML Purifier: HTML Purifier is a standards-compliant HTML filter library written in PHP.
PHP HTML Sanitizer: Remove unsafe tags and attributes from HTML code
htmLawed: PHP code to purify & filter HTML

上传文件

用is_uploaded_file和move_uploaded_file函数,使用HTTP_POST_FILES[]数组。并通过去掉上传目录的PHP解释功能来防止用户上传php脚本。
ZF框架下可以考虑使用File_upload模块

Session,Cookie和Form的安全处理

不要依赖Cookie进行核心验证,重要信息需要加密, Form Post之前对传输数据进行哈希, 例如你发出去的form元素如下:

<pre lang="php">&lt;input type="hidden" name="H[name]" value="&lt;?php echo $Oname?&gt;"/&gt;
&lt;input type="hidden" name="H[age]" value="&lt;?php echo $Oage?&gt;"/&gt;
&lt;?php $sign = md5('name'.$Oname.'age'.$Oage.$secret); ?&gt;
&lt;input type="hidden" name="hash" value="&lt;?php echo $sign?&gt;"" /&gt;

POST回来之后对参数进行验证

$str = "";
foreach($_POST['H'] as $key=&gt;$value) {
  $str .= $key.$value;
}
if($_POST['hash'] != md5($str.$secret)) {
  echo "Hidden form data modified"; exit;
}

PHP安全检测工具(XSS和SQL Insertion)

Wapiti – Web application security auditor(Wapiti – 小巧的站点漏洞检测工具) (SQL injection/XSS攻击检查工具)
安裝/使用方法:
apt-get install libtidy-0.99-0 python-ctypes python-utidylib
python wapiti.py http://Your Website URL/ -m GET_XSS

Pixy: XSS and SQLI Scanner for PHP( Pixy – PHP 源码缺陷分析工具)
安裝: apt-get install default-jdk
Remote PHP Vulnerability Scanner(自动化 PHP页面缺陷分析, XSS检测功能较强)
PHPIDS – PHP 入侵检测系統

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

程序开发 ,