Web网站通信安全的优化方案

2015-03-18 23:53
网络安全技术与应用 2015年10期
关键词:线程防火墙页面

0 引言

一般而言 Web系统的性能主要涵盖四个方面指标:即响应时间、并发用户数、吞吐量、TPS。响应时间指从客户请求到请求结果数据完全展示的时间。由此可见响应时间实际上是指客户端呈现数据时间、网络传输时间及系统响应时间的和。并发用户数指用户会话同时处于活动状态并向服务器发送类似的请求的用户的数量。吞吐量指每个服务器实例单位时间可以处理的请求量,TPS指系统每秒能够处理的事物的数量。并发用户数、吞吐量、TPS三者概念有一定交叉,同时对系统设计而言,提高这三者的性能和降低响应时间之间常常需要权衡。即根据实际业务的需要考虑在合理用户响应时间的基础上尽量提高并发性能还是保证合理并发数的情况下尽量降低响应时间。

1 web系统前台的优化

随着RIA的web应用越来越广泛,前台的性能开始越来越重要。国内与国外相比还有一些特殊情况,就是在国内IE市场占有率要比国外要高,大多数旧版的 IE浏览器脚本性能要比谷歌或者搜狐的浏览器要差很多这一点在设计阶段就要充分考虑这一点。在循环中要尽量减少字符串的拼接。同时可能的情况下DOM节点创建尽量使用innerHTML代替createElement。一般来说使用开源的业务框架要注意不要在页面上加载用不到的代码,以EXTJS为例,其window窗口关闭以后是不会主动释放资源的,如果前台业务复杂可以考虑使用窗口池。

2 应用服务器优化

2.1 IIS

ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指令来缓存整个页面输出。在网站优化阶段可以使用 Fiddler之类的工具分析网站的页面,找到内容几乎不变的页面,给这些页面添加OutputCache指令。像脚本库之类资源文件是长期不变的,可以在IIS中启用内容过期,如果需要更新可以给资源文件添加带版本号的不同文件名。由于现在绝大多数浏览器都支持HTTP压缩,没有特殊情况的话建议启用。除此之外可以在Windows系统中关闭不必要的服务,在IIS关闭不需要的HttpModule。

2.2 Apache Http

Apache2.X版支持插入多路处理模块,即MPM,MPM分为Work MPM和Perfork MPM其中Work MPM使用多个子进程,每个子进程中又支持多个线程而Perfork MPM使用多个子进程,但是每个子进程名不包含多线程。一般来说Work MPM性能要好一些,相同并发下占有内存也小,在JSP程序中Apache只应用在各个应用服务器之间的负载均衡可以考虑使用Work MPM。Perfork是UNIX平台上默认的MPM,稳定性要好一些建议在不支持线程安全的第三方模块上使用,如PHP3/4/5。

2.3 Apache Tomcat

Tomcat一般默认使用的堆内存为128M,在较大的应用中是不够用的,需要在catalina.bat中调大。同时线程数一般情况下配置在200到300之间,这个数字可以根据压力测试结果进行调节,一般Windows系统支持的上限是2000,Linux系统支持的上限是1000。负载比较大的情况下可以考虑和 Apache Http配合使用Tomcat集群基本上可以达到接近Jboss或Weblogic的性能。单独的Tomcat调优还可以考虑为Tomcat加载APR同时在配置中启用 NIO在大多数情况下可以提高 Tomcat并发处理能力和如果Web应用中不需要记录客户端的IP可以考虑禁用Tomcat DNS查询。

2.4 Jboss调优

Jboss本身是免费的,同时性能在大多数情况下可以媲美商用中间件。JVM堆大小一般设置在峰值内存占用的125%~140%。新生代和年老代之间的正确比例范围在1/3 和1/2之间。如果应用容许可以考虑GC使用G1收集器(JDK7以后的版本中),G1提供比CMS更好的性能。

2.5 Weblogic调优

尽量开启NIO。JAVA堆内存的设置可以参考JBOSS。在生产机的话可以考虑关闭JSP和Servle的动态编译。

3 数据库的优化

对于Web应用而言大多数性能问题都出现在SQL语句的优化上面。下面只是罗列出一些笔者的经验。

如果数据库 Mysql的情况下注意数据库引擎的选择,MyISAM倾向于查询,InnoDB倾向于插入和事物处理对于数据量特别大的表要拆表,分区或者分库。

如果数据量大并且对数据的操作单一,可以选择相应的NoSQL数据库,一般最少也能获得一个数量级以上的提升。

对于多表关联查询的 SQL出现性能问题,首先是否数据量最大的表走了索引,其次考虑表结构是否合理,如果表结构无法变更,尽量使用连接操作代替in和exist语句。

如果不了解具体机制,慎用某些系统自带函数,如MYSQL中的ORDER BY RAND()。

如果需要在收尾重复字符比较多的列上建索引(例如网址),可以考虑在插入数据的时候就对数据进行Hash映射,单独建立索引列(例如对网址取CRC32,在CRC值上建立索引),不要直接在这种列上建索引。

很多 Web应用中需要进行对数据排序同时限制数据返回条数,例如取某个表的最后500条数据。由于在绝大多数数据库中会先限制返回条数,再排序,一般得不到正确的结果。这种情况下需要套两层 select,内层排序,外层限制返回条数。但是这样做会影响性能。以Oracle为例,正确的做法是这样的,使用三层Select,最内层排序,并且只查询rowid(注意保证排序列为主键或者唯一键索引,其他类型的索引会失效),中间的一层in语句通过rowid取需要的列,最外层限制条数。经过如此处理的SQL一般开销都能降到可接受的范围内。

4 WEB网站安全优化

根据网站存在的安全威胁因素,要做好WEB网站的安全优化,首先从硬件上加以防范,作好物理环境、系统硬件的安全控制。另外运用下一代防火墙,审计系统等技术手段加以部署,以确保WEB网站安全性。

4.1 硬件系统安全措施

主要方法是在构建物理机房时,按照标准做好物理机房的防火防水防盗工程,保障强弱电系统稳定,在购买计算机及网络硬件时,选择知名品牌,做好设备冗余,加强设备的管理工作。

4.2 下一代防火墙

近年来,市场上出现了一种全新的防火墙,叫做“下一代防火墙”,该防火墙是面向应用层设计,能够精确识别用户、应用和内容,具备完整安全防火能力,能够全面替代传统防火墙,并具有强进应用层处理能力的全新网络安全设备。解决了传统安全设备在应用管理、应用可视化、应用内容防护等方面的不足,同时开启所有功能后性能不会大幅下降。

4.3 运维审计系统

网站系统内众多的网络系统运维人员、第三方系统运维人员以及设备厂商维护人员却缺乏有效的管理与监控,众所周知系统网络运维人员他们享有系统的“最高权限”,一旦出现恶意操作或误操作,将会对整个系统造成不可估量的严重后果。,针对该问题,目前流行使用一种设备进行监管,名为“运维审计系统”。

该系统具体功能包括单点登录、账号管理、身份认证、资源授权、访问控制和操作审计六个方面。通过该系统可以有效的避免一些越权操作,还可以追溯每一个操作过程,可以做到事前预防、事后追查。

5 总结

一般来说对于 Web应用而言,在应用服务器端大多数性能问题主要考虑线程池和数据库连接池配置,在数据库端主要考虑SQL语句的优化,在网站安全建设方面介绍了两种目前比较流行的安全技术。当然系统的安全和性能的优化是一个复杂的问题,跟实际情况高度相关,本文仅对实际应用中常见的问题提出一个思路,具体情况还需要具体分析。

猜你喜欢
线程防火墙页面
刷新生活的页面
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
构建防控金融风险“防火墙”
浅谈linux多线程协作
移动页面设计:为老人做设计
在舌尖上筑牢抵御“僵尸肉”的防火墙
下一代防火墙要做的十件事
Web安全问答(3)
筑起网吧“防火墙”