说到安全问题,这是一个综合性的问题。并不是说有一段优秀的程序就能确保应用系统绝对安全,也并不是说系统管理员的工作认真负责了,系统就完全安全了。
一般来说系统管理员的工作对系统安全的责任最大。如果系统安全没有做好,导致系统被入侵,那么即使程序中作再多的防范也仍然难逃被破解、篆改的厄运。其实现在很多漏洞,只要系统管理员勤打补丁、严格制定安全策略,合理设置文件系统、数据库系统、Web系统的各项权限和配置,既保证程序能够正常运行,有不给多于的权限不让入侵者制造机会,那么应用系统被侵入的可能就大大降低。
但是,安全也不能光靠系统管理员。一段不负责任的代码,可能导致原本非常安全的系统功亏一篑。比如说,系统管理员对系统作了非常严格的管理,但是程序员却不对用户的输入作任何过滤导致了SQL Injection入侵的发生,或者在关键的地方不防止站外提交,那么应用系统还是会被无情地侵入。
那么,如何做到安全呢?
我向来的看法是:安全需要系统管理员和程序员共同维护。
一个合格的系统管理员自然有一整套的安全方案去令系统稳定、安全、高效。有的时候一些程序员的低级错误可能导致安全问题,但是系统管理员也能够预先防范这种失误的可能。
比如说,虽然程序员不慎没有限制上传附件的扩展名导致了用户上传可执行文件到指定目录,但是假如系统管理员对上传文件加做了严格的权限限制,禁止此文件夹中文件的执行权限,那么这一次,应用系统就化险为夷了。
再比如说,SQL Injection入侵可能会导致重大的入侵后果,但是假如系统管理员删除了危险的且不必要的存储过程,对用户可能用到的数据库登录用户做了严格的权限限制,那么SQL Injection的危害就能降到最低。
但是程序员必须对内容安全负责,从程序的角度保证用户的输入对应用系统来说是安全的,不要忘记在有权限限制的地方疏漏,禁止站外提交,不使用不安全的组件(防止被溢出)……这方面需要注意的地方我就不在这里一一细说了,哪天我们可以专门写一篇文章来讲程序代码如何维护系统安全。
一个安全的应用系统是系统管理员和程序员共同努力的结果,系统管理员要从系统管理的角度做好安全维护工作,程序员从程序的角度维护系统安全,这样才有可能令应用系统最大程度地安全。
并不是说由于你选择Win2000 Advanced Server作为你的服务器操作系统,没有选择Linux、FreeBSD,那么你的系统就不安全了。也不能说由于你使用ASP来开发你的应用系统,而没有选择PHP、JSP来开发,你的应用系统就不安全了。同样地,也别以为那些采用Unix操作系统,用JSP、PHP、.NET开发的系统就一定比你的系统安全,他们的程序员或者系统管理员如果不负责任,他们的系统照样会有机可乘甚至不堪一击。而且
再说点题外话,也不要以为.NET、JSP的程序就一定比ASP的程序高效。一个初学Web开发的程序员写的.NET程序,不见得比一个优秀的ASP程序员写的程序执行效率高。
……