目录
- Web应用安全概述
- DWASP Top 10
- Web应用漏洞防护 - 跨站脚本攻击XSS
- Web应用漏洞防护 - SQL注入
- Web应用漏洞防护 - 文件上传漏洞
- Web应用漏洞防护 - 跨站脚本攻击XSS
Web应用安全概述
技术安全漏洞,主要是因为技术处理不当而产生的安全隐患,比如SQL注入漏洞,跨站脚本(XSS)、恶意文件执行等
第二个是业务逻辑安全漏洞,主要是由于业务流程考虑不周到,或者是处理不当造成的安全隐患。比如用户找回密码缺陷,一般我们找回密码的时候是需要输入你的手机验证码,而且你的手机号是你当初注册时使用的那个手机号,如果他让你重新输入一个新的手机号,那么就绕过了以前的手机号,所有人输入一个新手机号,那都可以找回密码了,所以这肯定不安全
短信炸弹漏洞,一般我们输验证码都要隔一分钟输一次,而且验证码获取的次数都有限制,如果你不做限制,他一分钟可能让你后台服务器发十万条验证码,这会耗尽短信资源,短信都是要钱的,所以这些就是业务逻辑的安全漏洞,我们在做网站规划设计的时候,是需要注意的
DWASP Top 10
第一个是注入漏洞,它主要是攻击者构造恶意的数据输入,诱使解析器在没有适当授权的情况下执行非预期的命令或者访问我们的数据,最典型的就是SQL注入,攻击者通过在网页里面输入一些非法的SQL命令,往我们后台的数据库里面插入黑客想要插入的一些字段,比如说你插入一个新的用户名和密码,比如说要访问超级管理员的用户名、密码,造成的效果就是执行非预期的命令或者非法访问我们后台的数据。
第二个遭受破坏的认证,web应用程序当中,可能存在不限制身份认证的尝试,比如说你可以一分钟去尝试认证一万次,而后台没有限制。这样可以比较方便的猜他的密码,所以其实我们在做web安全设定的时候,经常要限制认证的次数
第二个是web会话令牌的泄露,认证之后,它会给一个会话令牌,这个令牌被泄露之后,可能造成一些非法访问
应用会话超时设置不正确,比如说登录网银,你五分钟,没有任何操作,就被自动的踢出来了,如果不做设置或者设置成24小时都不被踢,那么你这个人走了之后,你的这个网银可能被他人操作,这样就不安全了
web应用口令复杂度不高,或者允许使用历史口令等问题,这些就是口令策略,这些策略这些问题都可能给我们的web认证机制带来影响
第三个敏感数据暴露漏洞,就是我们后台存储的数据,如果是明文,可能被黑客窃取,甚至可能被内鬼窃取,所以关键的数据我们要加密,对我们的用户名密码这一类的敏感数据,我们要通过哈希这种形式来存储
第四个XML外部实体引用漏洞,针对这一类漏洞,攻击者可以利用外部实体窃取uri文件处理器的内部文件和共享文件、监听内部扫描端口,执行远程代码和实施拒绝服务攻击
本来我是要访问etc/passwd文件的,但是我把后面的访问目录,改成访问某个IP地址下面的某一个文件,通过这种方式就可以探测我们服务器相关的一些IP地址,还有他的一些文件目录,这就是XML外部实体引用漏洞
第五个受损害的访问控制漏洞,主要是未对通过身份验证的用户进行适当的访问控制。因为不同的身份,它是有不同的权限,如果你没有设置相应的访问权限,比如说所有用户都可以访问管理员才能查看的敏感文件,这就造成了访问控制问题
第六个安全配置错误,包括不安全的默认配置,不完整的临时配置,开源云存储,错误的http标头配置以及包含敏感信息的详细错误信息。如果用户登录有错误,你给他返回四零四这一类的信息就行了,更完整的一些详细信息可能涉及到后台服务器版本,包括产生错误的一系列原因,这些是不用给外部用户看的,给内部管理员看就行了
比如说目录列表在服务器未被禁用,就是我们的用户登录,他可以看到我们WEB服务器的所有目录,这是很不安全的,导致攻击者可以列出所有目录,这个是需要去隐藏目录,隐藏后台服务器的版本号,包括隐藏一些关键配置
第七个跨站脚本漏洞,就是当应用程序中的新网页当中包含不受信任的,未经恰当验证或者转义的数据时,或者使用可以创建的HTML或JavaScript,浏览器API更新现有的网页时就会出现跨站脚本的缺陷,跨站脚本能够让攻击者在受害者的浏览器当中执行脚本,劫持用户的会话破坏网站或者将用户重定向到恶意站点,它能够在受害者的浏览器上去执行相应的脚本,这些脚本是攻击者让你执行的,劫持用户的会话,破坏我们的网站,在网站中插入一些新的内容,这新插入的新内容就是我们攻击者窃取用户信息的一种方式,或者直接将你定向到其他恶意的网站里面去。
Web应用漏洞防护 - 跨站脚本攻击XSS
这是钓鱼网站使用跨站脚本攻击,控制服务终端的浏览器的显示来达到攻击目的
这是用户真实的银行网站,这是攻击者的网站。它在用户的浏览器上显示了两部分的内容,第一部分是我们正常的网站,然后在这个空的位置上显示了我们攻击者的内容相当于我们这个用户去访问真实的网站,其实在最后得到的内容是一部分是真实的,一部分是黑客嵌入的内容,相当于就是破坏了我们网站的完整性。给你插入了一部分内容,这一部分内容是有危害的,这部分内容可能是窃取你的信息,也可能是直接给你挂一个网页木马,让你中木马
第八个叫非安全反序列化漏洞。序列化简单理解,就是把内存里边状态化的信息读成一个文件,把它写到一个文件里面,这叫序列化。然后反序列化,就是把这个文件,再给你搞到内存里面,形成一个状态化的信息,把它读到内存里面去执行,这叫反序列化。
非安全的反序列化,就是相当于把文件读到内存里面去执行。这个读的文件有可能是我们黑客构造的一个恶意代码,通过这种方式就可以利用它来执行攻击,包括重播攻击,注入等等,这些攻击都可以执行,这叫非安全的反序列化漏洞
第九个是使用含有已知漏洞的组件,比如说库、框架,还有其他的模块,典型的像我们的SSL它是一个加密的模块。SSL模块以前报了一个漏洞,这种漏洞是可能出现的,还有像pgp也是一个安全组件,它里面包含数字签名,身份认证等等一系列的功能,这个组件也有可能有漏洞,这是有漏洞的组件
第十个非充分的日志记录和监控,我们要求对网站进行日志记录和监控,如果你记录不充分,后期出了问题,那么你可能找不到什么原因
Web应用漏洞防护 - SQL注入
第一个对应用程序输入,进行安全过滤,本来我的网页是让你输入用户名密码的,但是你给我输入针对数据库的增删改查,从而去修改我后台的数据库,或者查询我数据库的内容,这是不允许的,所以我们对用户的输入进行过滤,你就老老实实的输用户名密码,不要给输drop、delete这种敏感的针对数据库的操作
第二个是设置应用程序的最小化权限。sql注入攻击是利用网页应用程序的权限,对数据库进行操作。如果最小化设置数据库和网页应用程序的执行权限,可以阻止我们非法SQL的执行,可以减少攻击带来的一个破坏影响。比如说你直接输入,你就有这个管理员的权限,那肯定对后台造成的影响是比较大的,我们可以建立独立的账号,使用最小权限来操作数据库,以免给攻击者可乘之机
第三个部署数据库防火墙或者数据库审计系统,通过部署这些系统能实现过滤用户输入的效果,一些敏感的输入你输不进去,包括对数据库敏感操作,你也操作不了,直接给你过滤掉
第四个屏蔽应用程序错误提示信息,有些时候输入错误之后,用户的浏览器上会显示出错误信息,有些时候会包含比较敏感的像ODBC的类型,数据库引擎,数据库的名称、表的名称等等,这些名称在给到用户的时候,要把它给过滤掉,防止攻击者通过我们返回的一些错误信息来了解我们数据库的内部情况。
第五个对开源的网页应用程序做适当的改造,你要对它进行相应的安全增强,防止黑客利用我们已知的表结构,比较轻易的对我们的数据库进行注入攻击
我们解决的时候,其实第一个最重要的就是检查输入,第二个部署相应的安全设备。
Web应用漏洞防护 - 文件上传漏洞
黑客可以向网站后台上传一些文件,并且这个文件可以自动执行,比如常见的就上传木马,网页木马,第一个将上传目录设置为不可执行,你能上传,但是你上传上去执行不了,你的木马执行不了,那就没用,可以通过这种方式避免上传文件远程触发执行或者自动执行
第二个检查上传文件的安全性。如果发现上传的文件有木马,有病毒或者其他的恶意代码,能够自动阻断你的上传,这是针对上传漏洞的解决方案。
Web应用漏洞防护 - 跨站脚本攻击XSS
主要是利用网站中的漏洞,向URL当中注入一些恶意脚本,欺骗我们的用户,比如说把你的网站内容做一个替换,比如说在你的网站中嵌入脚本,新增一部分内容,或者是强制让你去加载其他的外部脚本,让你强制的去浏览第三方的网页,这是跨站脚本攻击的几种方式
相当于就是在正常的网页里当中嵌入一部分内容,这是黑客想让你看到的有攻击性的内容。比如一个正常的官网,给你嵌入一部分反动言论
解决跨战脚本攻击,第一个检查用户的输入,跟SQL注入有点类似,SQL注入最后攻击的是后台的数据库,是注入的数据库,而跨站脚本,它攻击的实际上是网页是web,但是都是通过不合法的输入来做的攻击,检查用户的输入
第二个针对网页的攻击都可以用waf,web应用防火墙
第三个对你的数据做相应的备份和恢复,即使被攻击了,可以有效的快速的做恢复,第三个相当于偏向于管理