影响web安全的主要因素就是用户输入的不可控,这篇文章就从一个宏观的角度来分析一下如何去保证一个应用程序的安全。
为了保证web安全,首先就是要分析应用程序中那些方面容易遭受到攻击,然后根据分析结果在制定具体的安全方案。web应用程序的基本安全问题(所有用户的输入都是不可信的)致使应用程序实施大量安全机制来抵御攻击。
总体来说,web安全程序采用的防御机制由一下几个核心因素构成:
1.处理用户访问应用程序的数据与功能,防止用户获得未授权访问;(用户访问:身份验证,会话管理,权限控制)
2.处理用户对应用程序功能的输入,防止用户错误输入造成不良行为;(过滤用户的输入)
3.防范攻击者,确保应用程序称为直接攻击目标时能够正常运转,并采取防御与攻击措施挫败攻击者;(适当的防御措施)
4.管理应用程序本身,帮助管理员监控其行为,配置其功能。(监控管理员行为)
首先来说一下如何处理用户的访问:几乎任何应用程序都必须满足一个中心安全要求,即处理用户访问其数据与功能。在通常情况下,用户一般分为几种类型,如匿名用户,正常通过验证的用户和管理用户。而且,许多情况下,不同用户只允许访问不同的数据。
大多数web应用程序使用三层相互关联的安全机制处理用户访问:身份验证,会话管理,访问控制。这三个机制都是应用程序受攻击面的一个关键部分,对于应用程序的总体安全状况及其重要。由于这些机制相互依赖,因此根本不能提供强大的总体安全保护,任何一个部分存在缺陷都可能是攻击者自有访问应用程序的功能与数据。
对于身份验证来说,最常用的安全方法是用户名和密码,但这方面往往存在各种各样的问题,常见的问题如利用逻辑缺陷完成避开登陆功能,根据用户名猜测密码等。对于身份验证机制的攻击行为一般包括暴力破解,撞库,SQL注入,逻辑缺陷等,在设计身份验证功能模块时,应充分考虑到这些因素,进入放暴力破解模块,检查验证是否可以被绕过等。
会话管理是另一个重要的安全因素,为实施有限的访问控制,应用程序需要识别并处理每一名用户提交的各种请求,所以必须识别出目前登陆的用户。以前看到一个讲解会话很好的博客,有兴趣的可以看一下:https://www.cnblogs.com/lyzg/p/6067766.html。就攻击面而言,会话管理机制的有限性基本取决其令牌的安全性,因此再设计的时候,一定要保证令牌的不可预测性。
访问控制是给予不同的用户以不同的权限,不允许访问为授权的用户,权限控制也是web安全中非常重要的一环。
所有的用户的输入都是不可信的,这条准则一定要牢牢地记住。因为其输入的多样性,攻击者总是可以构造各种各样的输入来攻击应用程序。
处理用户输入的方法一般是以下的几种:
1.黑名单(拒绝已知的不良输入):这种方法其实是有限制的,可以被轻易的绕过,例如过滤掉了select,我们可以用Select来代替;同时要注意很多时候可以采用空字节的方式来绕过黑名单。
2.白名单(接受已知的正常输入):这种方法也是有缺陷,有的正常输入中包含一些方法字符,我们不得不接受这些字符。
3,.净化:以各种方式对其进行净化,防止数据对其造成影响,例如对输入进行转义或者编码。
4,.还有安全数据处理和语法检查两种方法对输入进行过滤。
总之对于用户输入而言,没有一种方法可以解决所有的问题,只有在合适的地方采取恰当的方法才能做到有效的防护。
同时,我们还要对攻击者进行处理,主要有以下的措施:处理错误,维护审计日志,向管理员发出警报,应对攻击。
这次从宏观上说了以下如何保护应用程序的安全。
、