官方给出的定义是:指受限制的计算机、组件、应用程序或其他联机资源的无意中留下的不受保护的入口点。漏洞是硬件软件或使用策略上的缺陷,他们会使计算机遭受病毒和黑客攻击。
通俗的讲就是:网站好比你家,但是你家由于锁没锁好,或者窗子没关好,又或者墙不结实等,贼(黑客)就很容易进去,进去之后可能会偷东西,砸东西,翻箱倒柜,甚至纵火焚烧,导致你家受到不同程度的损毁。
二、安全漏洞的一般表象上面我们介绍了什么是安全漏洞,那网站出现了安全漏洞被攻击后,一般会是什么样的结果呢
1.网站瘫痪网站全面瘫痪,无法正常访问,即在浏览器中无法打开,提示无法连接或者网络错误等信息
2.链接指向篡改即本应该指向A页面的链接,现在打开后指向了B页面,导致网站逻辑混乱。
3.数据篡改网站的数据被恶意修改,导致数据与原正常数据出现出入。
4.挂入黑链网站被挂入黑链,大概网站或者点击网站的某个链接,就会出现非法链接,多以赌博和黄色网站内容为主。
5.信息泄露网站被攻破后,站点信息被窃取,造成数据的泄露。
6.横向攻击网站被攻击后,该网站将作为攻击源,对网站所在的局域网内部所有的网站进行横向攻击,导致所有网站均收到损害。
7.流量损耗网站被恶意请求数据,造成带宽损耗。
8.其他现象三、造成安全漏洞的原因就像我们上面举得的例子,网站好比你家,黑客好比小偷,小偷要进你家有两个关键因素。第一个是,你家安全防御怎么样,门锁没锁;第二个是,小偷技术怎么样,入股技术高,用C-4炸药炸开也是偷。小偷的技术咱管不了,咱只能从房子的安全防御入手。但房子是个复杂体,从施工,装修,经过不同的劳动单位,使用了不同的材料,每个环节都有可能留下漏洞,所以加强房子的安全系数,是个超级复杂和繁琐的大活。下面我们介绍一下,造成网站安全漏洞的常见原因:
1.SQL注入漏洞很多程序员在编码时DAO层实现都是直接拼接SQL和参数,或造成SQL注入漏洞,攻击者很容易得到响应的账号密么和控制权限。
解决办法:使用预编译的prepareStatement代替statement;使用框架中的setParameter设置参数。
2.验证码前端校验把验证码放在前端校验,后台免检,这样很容易被攻击,使得攻击跳过验证环节。
解决办法:前台提交数据到后台后做进一步校验,如验证码校验、数据格式校验、验重校验。
3.表单重复提交相同操作的表单重复提交,或造成数据多次被更改等漏洞。
解决办法:token验证。
4.文件上传格式校验不合格对上传的文件格式校验不合格,导致上传一些攻击文件,造成网站被攻击。
解决办法:通过文件头信息严格验证文件格式,从上传功能开始防范。
5.第三方框架的固有漏洞很多框架有既定的漏洞,尤其是一些开源框架,由于缺乏维护等,漏洞无法及时修复,网站在使用框架后,造成无法修补的漏洞。
解决办法:尽量少用第三方框架,必须使用时要及时根据官方发布的方案进行版本升级,根据公开的漏洞执行方式编写拦截器
6.密码缺省密码使用缺省,黑客爆破的概率异常的高,非常容易被攻击。
解决办法:通过配置测试模式和生产模式控制验证码验证,管理员账户必须使用非缺省加密处理,必要时使用物理验证。
7.端口开放太多服务器各种端口全开,很容易被进行针对性的端口攻击。
解决办法:防护墙打开,仅开放必要的端口如80,13389,设置远程登录IP白名单
8.Options不过滤不过滤Options请求方式,容易被恶意请求
解决办法:
在配置文件里详细配置Options请求策略
9. XSS,CSRF漏洞黑客通过9XSS攻击,CSRF攻击网站
解决办法:
通过拦截器过滤请求参数
10.X-Frame-Options劫持视觉上的欺骗手段。攻击者使用一个透明的、不可见 的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知 情的情况下点击透明的iframe页面
解决办法:
修改web服务器配置,添加X-Frame-Options响应头。赋值有如下三种: 1、DENY:不能被嵌入到任何iframe或者frame中。 2、SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。 3、ALLOW-FROM uri:只能被嵌入到指定域名的框架中。
11.HTTP获取远端WWW服务信息本插件检测远端HTTP Server信息,这可能使得攻击者了解远程系统类型以便进行下一 步的攻击。
解决办法:
服务器修改config/server.xml文件
12.目录遍历漏洞该漏洞允许浏览者直接在浏览器里浏览和下载网站的文件,导致网站结构,网站文件,甚至数据库轻易的被黑客搞到。造成此类漏洞的原因是服务器管理员的疏忽
解决办法:
服务器管理员取消网站目录遍历的权限
13.CSRF漏洞(Cross-site request forgery)跨站请求伪造CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的
解决办法:
(1)客户端页面增加伪随机数。因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了;
(2)请求referrer验证;
(3)方法1已经能解决99%的csrf攻击了,由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,那就是验证码。每次表单提交输入验证码。
14.json-hijacking漏洞CGI(common gateway interface)公共网关接口 (HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上)以JSON形式输出数据,黑客控制的开发者站点以CSRF手段强迫用户浏览器请求CGI得到JSON数据,黑客可以获取敏感信息
解决办法:
修复方法和 CSRF漏洞一样。
15.权限审阅漏洞没有提示让输入密码,直接可以操作
解决办法:
进入管理员页面时要检查是不是管理员的权限
16.不安全的直接对象参照物攻击者可以利用直接对象参照物而越权存取其他对象。当网站地址或者其他参数包含了文件、目录、数据库记录或者关键字等参照物对象时就可能发生这种攻击
解决办法:
利用索引,通过间接参照映射或者另一种间接法来避免发生直接对象参照物泄密。如果你不能避免使用直接参照,那么在使用它们之前必须对网站访问者进行授权
17.跨站指令伪造这种攻击简单但破坏性强,它可以控制受害人的浏览器然后发送恶意指令到网络应用软件上。这种网站是很容易被攻击的,部分原因是因为它们是根据会话cookie或者“自动记忆”功能来授权指令的。各银行就是潜在的被攻击目标
解决办法:
不要依赖浏览器自动提交的凭证或者标识。OWASP说:“解决这个问题的唯一方法是使用一种浏览器不会记住的自定义标识
18.不安全的认证和会话管理如果应用软件不能自始至终地保护认证证书和会话标识,用户的管理员账户就会被攻破。应注意隐私侵犯和认证系统的基础原理并进行有效监控
解决办法:
通信与认证证书存储应确保安全性。传输私人文件的SSL协议应该是应用软件认证系统中的唯一选择,认证证书应以加密的形式进行保存
19.不安全的加密存储设备然加密本身也是大部分网络应用软件中的一个重要组成部分,但是许多网络开发员没有对存储中的敏感数据进行加密。即便是现有的加密技术,其设计也是粗制滥造的
解决办法:
不要开发你自己的加密算法。最好只使用已经经过审批的公开算法,比如AES、RSA公钥加密以及SHA-256或者更好的SHA-256
20.不安全的通信这种漏洞出现的原因是因为在需要对包含敏感信息的通信进行保护时没有将网络流通的数据进行加密。攻击者们可以获得包括证书和敏感信息的传送在内的各种不受保护的会话内容。因此,PCI标准要求对网络上传输的信用卡信息进行加密
解决办法:
在所有经过认证的连接上利用SSL,或者在敏感信息传输过程中使用SSL。SSL或者类似的加密协议应该加载在客户端、与在线系统有关的合作伙伴、员工和管理员账户上。利用传输层安全或者协议级加密系统来保护基础结构各部分之间的通信,比如网络服务器与数据库系统之间的通信。
21.未对网站地址的访问进行限制有些网页的访问应该是受限于一小部分特权用户,比如管理员。然而这些网页通常并不具备真正的保护系统,黑客们可以通过猜测的方式找出这些地址
解决办法:
不要以为用户们不知道隐藏的地址。所有的网站地址和业务功能都应受到一个有效访问控制机制的保护,这个机制可以检验用户的身份和权限
22.DDoS 攻击攻击者不断地提出服务请求,让合法用户的请求无法及时处理
解决办法:
限制单个用户的流量(包括 IP 等
23.XXE 漏洞当应用程序解析 XML 输入时,如果没有禁止外部实体的加载,导致可加载恶意外部文件和代码,就会造成任意文件读取、命令执行、内网端口扫描、攻击内网网站等攻击
解决办法:
禁用外部实体
过滤用户提交的XML数据
24.JSON 劫持一些 Web 应用会把一些敏感数据以 json 的形式返回到前端,如果仅仅通过 Cookie 来判断请求是否合法,那么就可以利用类似 CSRF 的手段,向目标服务器发送请求,以获得敏感数据
解决办法:
X-Requested-With标识
浏览器 JSON 数据识别
禁止 Javascript 执行 JSON 数据
25.业务漏洞务漏洞是跟具体的应用程序相关,比如参数篡改(连续编号 ID / 订单、1 元支付)、重放攻击(伪装支付)、权限控制(越权操作)
解决办法:
禁止相关权限
26.内容过期有时间站内应用的第三方链接等信息过期后,被恶意使用,但站点并不知情,就躺枪了
解决办法:
及时排查内容过期并更新
27.操作系统漏洞操作系统会有固有的漏洞
解决办法:及时更新操作系统的补丁
28.其他漏洞还有其他漏洞,在实施项目的时候进行一一落实。
总结任何一个网站都会遇到和出现漏洞问题,我们要从两个方面入手,两个步骤实施。第一步,站点建设时期,要设计良好的站点架构,尽量采用原生开发的模式,减少漏洞出现的几率。第二步,站点维护时期,要保证好站点的硬件环境和站点的良好维护更新,这样能最大程度的减少网站安全漏洞。