来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] ...
文 张百川(网路游侠)
罗马非一日建成,网站也是如此。网站由很多部分组成,缺一不可。虽然现在提供了很多所谓的模板化建站工具,但是对于大型网站而言,建设起来至少需要以下环节:网站规划、网站制作、带宽申请、域名注册、服务器搭建、安装调试、正式发布。 了解了网站的制作流程,我们就可以知道,安全应该始终贯穿于整个流程,下面我们从不同的层面分析网站可能面临的威胁,探讨可行的解决方法。 网络层面 做网站,最终目的要面对公众。因此就要把服务器放到网络上,也就不可避免的要面对网络上的各种攻击。 TCP/IP设计之初是为了共享资源,因此对安全方面的考虑并不多,注定有很多安全问题,常见的有以下几种方式: ARP挂马 当我们正常访问网站时,会返回给我们网页的代码,但如果是下面的场景: A:正常的服务器,B:被黑客控制的服务器。 黑客在B上安装ARP攻击工具,如果有人要访问A服务器,B抢先回答“我是A服务器”,则访问者就到了B服务器了。这时候,会有两种情况:网页直接打不开,因为B服务器没有绑定A的主机头;网页可以打开,但是被黑客嵌入代码。比如通过<iframe>方式嵌入病毒、木马网页的代码,导致访客打开的时候中毒或被入侵。 当然,ARP攻击方式不仅上面我们描述的这一种,但对WEB服务器而言,表现几乎一致:要么打不开、要么被嵌入代码。 对ARP攻击,在交换机做好绑定,并且启动交换机的ARP防护,会得到较好的效果,也可以安装响应的安全软件,如ARP防火墙。 拒绝服务攻击 上面我们说到,互联网设计的初衷是为了进行资源共享,在设计上是有缺陷的。因此拒绝服务攻击也是很难对付的一种攻击方式。 常见的拒绝服务(DoS)方式有: SYN Flood 简单举例说下三次握手:客户端访问服务器的时候,会发出一个请求,说:我要上车;服务器收到请求之后,说:你上车吧;客户端:出示车票,上车。然后愉快的旅程就开始了! 但是如果攻击者,也就是客户端中途出现问题怎么办?服务器说“你上车吧”之后,客户端死机了,或者掉线了,那么服务器一般还会保持这个过程(留座)一段时间,一般是30秒钟到2分钟(和现实生活中的很像)。 如果这个车有100个座位(这取决于服务器的内存、CPU、带宽等),但是有50个人同时说了上车但不上去,那么就有50个正常要上车的人无法上车。 如果攻击者模拟了200个人同时发起请求,则几乎没有人能顺利访问服务器。 UDP Flood UDP协议是无连接的,因此黑客如果向服务器的端口随机发起一些数据包,如10M的带宽却试图用100M的数据进行连接的时候,服务器就无法提供正常服务了。 拒绝服务攻击则是比较难以防御的,虽然可以在服务器上设置SYN超时时间,但效果并非特别明显,因为攻击者既然发动拒绝服务攻击,则数据量就不会太小。笔者认为应对小型的DoS攻击,最快捷的方式还是采用安装软件的抗DoS防火墙,相对于对操作系统去做繁琐的配置,非常省力。 如果应对大型的DoS攻击,则最好需要运营商配合,在骨干网上进行攻击源切断。(当年Yahoo!都被此种攻击烦恼,所以防范难度很大),如果仅仅从机房去做防范,几乎起不到很好的效果。 系统层面 操作系统,无论是Windows、Linux还是FreeBSD等系统,均无法保证开发过程中不出现任何漏洞。而在这些漏洞中,威胁最大的是远程溢出漏洞,如:IIS5.0 WebDAV远程溢出漏洞、MS08-067远程溢出漏洞。黑客无需接触到服务器,就可以在极短的时间内(以秒计)拿到服务器的管理员权限! 有IIS或Apache配置有问题,导致上传目录文件暴露,很多内部文件直接暴露在公网上!下图既是笔者从某政府网站下载到的公务员考试信息。另外还有一些文件中保存了新浪微博的密码等! 同时,服务器的默认配置本身就是为了方便应用,而不是提供给大家一个无懈可击的系统,因此默认情况下,安全级别不是特别高。 用Windows服务器的朋友们,注意修改终端服务的端口,默认是3389,当年Windows 2000流行的时候,一个“输入法漏洞”就搞砸了好多服务器。 另外提示下:像Serv-U这样的软件的提示信息最好也修改下,并保持最新版本,目录访问权限一定要做好,这因为Serv-U导致服务器被攻击的案例太多了。 要防范系统被攻击,首先服务器要进行安全配置,通常要做的是: ü 修改Administrator账号名称和描述,密码不低于14位,包含大小写字母、数字、特殊符号,并定期更改(如30天) ü 建立一个名为Administrator的帐号,设置同样复杂(或更为复杂)的密码,但仅给予Guest帐号权限 ü 禁用Guest帐号 ü 修改3389端口,并增加登录授权 ü 修改FTP端口 ü 设置本地安全策略,设置账户登录3次后锁定30分钟(你也可以设置的更为严格) ü 在本地策略中设置“不显示上次的用户名” ü 只允许Administrators权限的人访问cmd.exe等文件 ü 禁用C$、D$等默认共享 ü 关闭无关服务,如服务器上的打印服务等 ü Windows一定要启用NTFS,设置严格的访问授权。如A网站用A帐号访问,帐号无其它目录的访问权限,最大保证安全性 此外,如果你用Unix、Linux做服务器,那么请相信:如果你对此系统不精通,那么它的安全性并不比Windows好。擅长的才是最好的!配置Linux类服务器的时候注意权限的分配,不要一律都设置成777,很容易出事。如果是政府、大型企业,建议采用Unix安全管理系统,可以直接阻断执行Unix的某些危险命令,如rm等。 无论什么系统,必须安装杀毒软件、防火墙、补丁管理软件。要配置好策略,定期升级,否则一切都是白搭。一定配置首页文件,如index.asp、default.htm等,针对上传目录禁止列目录权限。如果可能,定期采用漏洞扫描软件进行安全性评估。 应用层面 其实这部分才是最复杂、难度最大的部分,因为很多问题,不会有现成的解决方法。针对80端口的常见攻击或配置问题有: SQL注入攻击 SQL注入的攻击历史有10年了,但是对黑客而言依然非常好用。 举一个后台登录的SQL注入例子,正常情况下是:SELECT * FROM [ADMIN] WHERE USERNAME='ADMIN' AND USERPWD='ADMIN',如果我们在USERNAME的文本框里输入' OR 1=1 –,则提交的语句变成了:SELECT * FROM [ADMIN] WHERE USERNAME='' OR 1=1 --' AND USERPWD='ADMIN',用户名为空或1=1(1=1永远成立),然后密码部分被注释掉(不执行)了。这样黑客就可以登录网站后台为所欲为! 当然,SQL注入攻击方式非常灵活,只要代码写的不够严谨,黑客可以查询数据库版本、用户名、密码,甚至可以直接更改密码,也可以利用数据库的功能写入文件、更改文件、篡改网页、挂马。危害非常大! SQL注入攻击说到底,还是代码过滤不严格的问题,因此需要对代码执行过滤,同时需要对服务器进行安全加固。建议采用WEB服务器、数据库服务器分离的模式。 1. 参数化SQL语句执行,而不是直接提交用户数据 2. 特殊字符过滤,如'"\尖括号&*;等 3. 限制数据长度 4. 在conn.asp等文件中嵌入防护代码进行过滤 5. 在服务器安装SQL注入防护软件过滤(最省事) 跨站脚本攻击 跨站脚本(XSS)攻击指的是黑客可以在WEB页面中插入一段脚本代码,当用户浏览页面的时候,触发代码,达到攻击目的。 下面是一个来自百度百科的例子: 攻击Yahoo Mail 的Yamanner 蠕虫是一个著名的XSS 攻击实例。Yahoo Mail 系统有一个漏洞,当用户在WEB上察看信件时,有可能执行到信件内的javascript 代码。病毒可以利用这个漏洞使被攻击用户运行病毒的script。同时Yahoo Mail 系统使用了Ajax技术,这样病毒的script 可以很容易的向Yahoo Mail 系统发起ajax 请求,从而得到用户的地址簿,并发送病毒给他人。 怎么样,只要你看邮件,黑客就可以把你的地址簿发给别人,你有好的办法检测到这种攻击方式吗?——很难! 同样的,跨站脚本攻击可以在你网站的页面上,同步执行另一个网站的文件,这个文件可能是木马、病毒……也可以嵌入页面,进行钓鱼攻击。 一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。 对付跨站脚本攻击,可以过滤字符,如<>,;’等,内容输出之前做转换,防止不必要的HTML输出;也可以将cookie和IP绑定,防止cookie外泄之后被攻击,同时采用如WEB应用防火墙(WAF)等进行跨站脚本攻击防护。 CC攻击 CC攻击和前面提到的拒绝服务很像。但它一般是利用大量代理,频繁提交某些页面,造成服务器无法响应,从而影响访问。它模拟的是正常用户的访问,因此很难检测。 对此,我们需要限制每一个站点的IP连接数和CPU使用,防止对同一服务器的其他站点造成影响,同时可配置独立的应用程序池。开启Session防护,使其第一次、第二次正常,第三次刷新则阻断。因为CC攻击一般通过代理访问,可阻断代理访问。还可以限定单IP在特定时间的访问次数。 数据库层面 黑客主要通过SQL注入方式渗透进数据库,一旦渗透进去则后果严重。另外各类数据库自身皆有漏洞,如拒绝服务等,包括Oracle在内都无法避免。 如果用MySQL数据库,最好不要允许远程访问。否则一旦被找出漏洞服务器的安全就岌岌可危了。用SQL注入漏洞跑出帐号和密码,再远程连上去,服务器基本就不属于自己了。3306端口建议修改下。另外与MySQL配合比较好的管理平台phpmyadmin貌似也爆出了几个漏洞,注意防护。 如果用SQL Server数据库,存储过程最好想办法控制,就是xp_cmdshell等。一般来说如果用企业管理器、查询分析器连接上,那么就可以用账户权限执行命令,如果是Administrator或者SA,那么服务器就不属于你了。1433端口要修改。 无论是什么类型的数据库,都要注意升级、安装补丁,否则很容易导致问题。如果是政府、大型企业,建议安装数据库审计系统(硬件,当然像SQL Server、Oracle这些商业级数据库产品自己也有审计功能),业内也有数据库防御系统 在网站应用的时候,建议WEB服务器、数据库服务器分离。在数据库服务器限定能连接到服务器的IP地址。防止黑客直接访问到数据库服务器。 数据层面 简单来说,就是因为黑客的攻击造成数据泄露、丢失,如前段时间流行的拖库事件。 首先我们要做好服务器的UPS、RAID、电源冗余。其次要备份,数据库和文件都要备份,可以利用SQL Server或者Windows自己的备份系统,很方便,也可以做计划任务。也可以采用第三方数据备份软件。 网站安全是个系统工程,从系统选择(Linux、Windows、FreeBSD等)到采用的技术(ASP、ASPX、PHP、JSP等),包括数据库类型,都影响到网站的安全。建议常用网站漏洞扫描工具对网站进行定期评估,以及时发现安全问题。亡羊补牢,为时未晚 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com