说到安全, 据我用过的cms,基本上都有这样那样的问题,其中DEDECMS最为严重,漏洞多的吓人。 其实最重要的就是对目录权限的控制,只要目录控制好了,基本上就杜绝了大部分漏洞。另外,程序代码是否有漏洞要多方面检测,一般不好直观的发现。不过,编写某些功能的时候,就要特别注意了,比如:文件上传问题,代码上传问题, 表单提交问题,跨域脚本问题,DEBUG问题等。在这里,我简要说下自己的观点,不对的地方欢迎指正,谢谢!
1. 目录权限控制
assets目录只是一些静态资源,但是往往会频繁使用,而且具有读写权限,所以要控制可执行权限,也就是不能让这个目录执行php文件。
protected目录是主程序目录,除了data, runtime可读写外,其他一律不让读写操作。
其他目录可以有读写权限,但是不能有执行权限
a. 针对apache可以做如下配置(修改根目录的.htaccess文件, 当然直接在httpd.conf中配置也可以);
# 设置不能执行php权限的目录
RewriteRule assets/(.*).(php)$ – [F] RewriteRule framework/(.*).(php)$ – [F] RewriteRule requirements/(.*).(php)$ – [F] RewriteRule public/(.*).(php)$ – [F] RewriteRule themes/(.*).(php)$ – [F] RewriteRule uploads/(.*).(php)$ – [F]
其他不可执行权限的目录都放一个.htaccess文件内容都写上:
deny from all
b. 针对nginx,比如目录或者文件需要是www用户,www用户组的权限才可以执行。那么其他目录都设置成root权限:
drwxr-xr-x 7 www www 4096 11月 26 15:51 assets -rw-r--r-- 1 www www 1150 8月 8 15:24 favicon.ico drwxr-xr-x 19 root root 4096 7月 22 15:45 framework -rw-r--r-- 1 www www 622 9月 19 17:21 index.php drwxr-xr-x 13 root root 4096 7月 22 15:45 protected drwxr-xr-x 7 www www 4096 8月 13 09:45 public -rw-r--r-- 1 root root 1074 9月 10 21:37 README.md -rw-r--r-- 1 root root 33 8月 12 18:01 robots.txt drwxr-xr-x 3 www www 4096 7月 22 15:45 themes drwxr-xr-x 8 www www 4096 8月 20 13:52 uploads
2. 编辑器中文件上传的问题,这个就牵涉到session,未授权的session不让上传,并且上传的目录要是固定的,这就避免了在其他目录创建文件漏洞。