编辑者: 发布时间:2018-04-04 点击次数:
为规范厦门大学网站开发,提高厦门大学网站开发水平,厦门大学信息与网络中心集合了互联网和厦门大学部分网站开发人员的经验和心得推出本最佳实践。本网站开发最佳实践涉及服务器,网站开发,美工等内容。如果需要委托其他软件厂商开发,请把本文档发给对方参考。如果有任何意见或者建议,请发邮件到 vhost # xmu.edu.cn 。谢谢。
服务器
目前信息与网络中心提供托管服务器,托管虚拟机,托管虚拟主机,网站群等服务。具体可查看 http://vhost.xmu.edu.cn 。
服务器是否专有用途
服务器应当只做网页和数据库用途,请不要为了传输文件方便在服务器上安装qq,ftp等客户端软件,服务器越简洁,遭到黑客攻击才越容易看出端倪。
是否选择了正确的操作系统
PHP+MySQL应部署在Linux服务器下,尽量不要部署在Windows服务器上。Java建议部署在Linux服务器上。ASP和ASP.NET部署在Windows服务器。Linux服务器尽量不要做过多的自定义,软件使用包管理器安装。更高级用户可使用诸如Puppet,Chef等配置管理工具配置服务器。安装的操作系统和数据库程序的来源应可信,如果是迅雷下载的ISO文件应检验官方的MD5值。
是否启用了安全更新
服务器应保持更新到最新,Windows把自动更新打开。Linux把安全包自动安装打开。Windows建议安装Windows 2008 64位及以上。Linux诸如Ubuntu应安装LTS 64位版本。
是否启用了动态磁盘扩展功能
服务器应启用动态磁盘功能,方便后期根据需求扩展磁盘大小。Windows建议2008以上,使用“动态磁盘”,Windows 2003动态磁盘不如2008灵活。Linux建议使用LVM。把var和根目录分开。
是否配置并启用了防火墙
服务器应配置并启用防火墙。如果临时排查错误需要暂时关闭防火墙,应在排查完重新打开防火墙。防火墙规则根据需求,一般网站只开放80端口。开放部分IP地址的3389和22端口。应当禁止MySQL和SQLServer的远程访问功能,关闭他们对应的端口。
是否做了备份
如果你的数据没有备份,那你可以认为这个数据是不存在的。应当至少有一个备份,这个备份不应当在同一台机器,如果有条件,应把备份做在异地。开源备份工具可以考虑BackupPC、Amanda、Bacula。个人备份可以考虑 areca http://sourceforge.net/projects/areca/files/ 。
是否使用了域名而不是IP部署
服务器有条件应尽量使用域名访问而不是IP访问。服务器应可支持IPV6。Web应用应只开在80端口。如果一个服务器需要开多个Web应用,应采用基于域名的虚拟主机技术或者采用开虚拟目录的模式而不是采用不同端口的模式。
是否支持IPV6
最新的操作系统已默认支持IPV6,应给服务器配置固定的IPV6地址。程序代码也应支持IPV6,保存访问者的IP地址的字段应能够容纳IPV6地址长度。分析IP地址的代码应能支持IPV6格式。
服务器代码和数据等目录是否清晰
Web应用,应当只分为下面5个角色:
程序代码。程序代码应考虑放到诸如SVN,Git等源代码版本控制工具内管理,在服务器备份时,程序代码无需备份,重新部署时只需重新下载程序代码即可。
第三方程序。第三方程序包括操作系统光盘,数据库安装文件,应用框架代码,报表控件等安装文件,这些为可下载到的文件,保留是为了部署方便,可不用备份。
数据库。
数据或者上载文件。上载文件目录建议整个Web应用只有一个,如果可能,请放到Web应用外面,设置为不可执行,使用杀毒工具杀毒。
日志。
在目录结构上,建议以上5个角色目录结构清晰。Windows桌面应干净,像处女座一样。可变的数据库和数据或者上载文件应跟操作系统分区分开,以防在操作系统崩溃后该分区还可读。日志文件由于会不断增加,如果没有logrotate机制,应把日志所在的分区独立分出,以免日志空间膨胀占用所有磁盘空间影响整个系统无法操作。
是否使用了强密码
是否使用了监控工具
数据库
是否应用了独立用户,最小权限原则
Secure By Default的另一层含义就是最小权限原则。最小权限原则也是安全设计的基本原则之一。最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。比如在Linux系统中,一种良好的操作习惯是使用普通账户登录,在执行需要root权限的操作时,再通过sudo命令完成。这样能最大化地降低一些误操作导致的风险;同时普通账户被盗用后,与root帐户被盗用所导致的后果是完全不同的。http://book.51cto.com/art/201204/330066.htm
是否限制了Web数据库管理工具的权限
不应当在Web部署服务器部署数据库管理工具,比如PHPMyAdmin,如果要部署,应当限制IP访问,设置强密码,剔除无关账户。
是否没有在源代码版本控制系统里面保存数据库等密码
不应当在版本控制系统诸如Git,SVN内保存诸如数据库密码和发送邮件账户的密码等,应当把这些写入配置文件,配置文件不放入版本控制系统,只放置模板配置文件供开发修改使用。
后台程序
是否有使用框架协助开发
应选择一个框架以减轻开发工作量。框架的选择应是选择社区活跃度最高,更新较频繁,安全的框架。PHP可选择CakePHP,Symfony,Zend。Python可用Django,轻量级可用web.py。ASP.NET使用微软自带的MVC或者WebForms。JavaScript框架可选择MVC框架包括AngularJs、Ember.js、Backbone.js、Knockout等,展示框架可选择JQuery UI、Bootstrap等。
是否关闭了调试模式
生产环境应当关闭调试信息。
是否有对用户的输入进行检查过滤
代码应不信任用户的任何输入,URL链接或者表单数据都是可以精心伪造的。
是否有预防注入漏洞
是否有预防跨站脚本攻击 Cross-site scripting (XSS)
是否有预防跨站域请求伪造 Cross Site Request Forgery (CSRF)
是否有预防点击劫持 Clickjacking
是否对密码进行了加密保存
加密应当加盐再摘要保存。
是否对密码、登录等部分做了防暴力破解检查
应限制密码输入错误的次数,限制单个IP对某个敏感资源请求的次数。
是否对程序文件所在目录设置只读和不可执行权限设置
程序文件所在目录应当设置只读,更新代码后重新设置权限。上载目录设置可写不可执行,以防被上载木马。
是否对下载文件进行了全面的保护
下载文件应放在Web目录以外。下载首先判断权限,再去系统读取需要下载的文件,通过头部输出content-type和content-disposition attachment;filename=等提供文件名。不应在一个页面判断完权限后直接重定向到真实的文件下载,这样有可能被直接下载或者被迅雷等工具记录文件地址而被盗链。ASP.NET可使用Response.TransmitFile加速下载。
是否使用UTF8格式保存源代码和展示网页
是否考虑了国际化 i18n
是否对每个需要登录权限的页面都做了完善的检查
应对每个需要登录的页面在程序最开端检查用户的权限。不应漏掉提交的页面,因为用户有可能直接构造数据提交。
网站前端
是否有参考了Yahoo!的Best Practices for Speeding Up Your Web Site
http://developer.yahoo.com/performance/rules.html
页面设计
是否已抛弃使用形象首页
形象首页也叫扉页,不应在网页使用扉页。有些网站有中英文版,不同运营商网络选择,或者访问首页首先是进入一段动画或者Flash,点击后才进入真正的首页。这个页面导致用户访问需要多点击一次,对于网站的SEO也较为不利,应直接进入首页,中英文版通过右上角切换。
是否已经不再使用table布局
table应当只做大量数据展示使用,不应当使用table来布局。应使用Div布局。即使在页面没有CSS的情况下整个网页也可轻松访问。
是否采用一些语义化的标签
可以使用一些语义化的标签。也可给DIV等起上通用的名字,比如新闻标题定义class或者id为news_title,新闻内容定义class或者id为news_content。方便机器抓取。
是否有做适合手机和平板浏览的页面
可使用响应式布局。
是否进行了SEO优化
不应使用flash。站点应当有站点地图,站点地图目录结构清晰。URL美观。不应使用中文文件名。源代码尽量减少非语义化的内容。可在META头部里加入关键字等信息。
网站性能
是否在上线前对网站性能进行了评估
网站性能评估可使用Apache基金会的ab进行,也可采用LoadRunner等商业工具。PHP可用xdebug + webgrind定位性能瓶颈。PHP可安装诸如APC等加速工具。可采用Nginx或者Squid等工具加速网站。
其他
如果有任何意见或者建议,请发邮件到 vhost # xmu.edu.cn 。谢谢。