72 个网络应用安全实操要点,全方位保护 Web 应用的安全

Access-Control-Allow-Methods: GET
28、合理使用,避免反跨站请求伪造等漏洞
迄今还是比较新的技术,技术文档较少使用它难免会有些风险 。所以,采用时务必要做到以下几点:
29、采用 U2F 令牌或客户端证书,保护系统关键用户免受钓鱼攻击
如果系统可能会面临钓鱼攻击的威胁,说人话也就是,“如果存在这样的可能性:攻击者创建一个假的网站,骗取管理员/CEO 或其它用户的信任,从而盗取其用户名、密码和验证码”,那么就应该使用 U2F 令牌或客户端证书来防止这种攻击,这样的话即使攻击者有了用户名、密码和验证码也无法得逞 。
备注: 强调钓鱼防护对于一般用户而言往往会带来不必要的麻烦 。然而,提供多一种可选项对终端用户而言也非坏事 。此外,向用户提前告知钓鱼攻击的危险也是非常必要的 。
30、针对跨站点泄露进行保护
跨站点泄露是一系列浏览器边信道攻击 。这种攻击使恶意网站可以从其它 Web 应用程序的用户中推测出信息 。
这种攻击存在已有时日,但是浏览器端却是最近才开始添加针对性的预防机制 。可以在 这篇文章 中了解关于该类攻击的更多细节以及应该采取的安全控制措施 。
二、服务器端的威胁防御
其次,是服务器端的威胁防御,这里从应用系统、基础设施、应用架构、应用监控、事件响应等不同侧面,归纳了如下建议:
2.1 应用系统 31、对用户输入进行合法性验证
该类别的措施中最关键的一点就是尽可能严格地对所有用户输入进行合法性验证 。适当的验证会使系统漏洞更难被发现和利用 。对不合法的用户输入直接拒绝,而不要尝试去清洗 。验证方面包括如下:
32、异常处理优雅化,避免技术细节泄露
对终端用户不要显示堆栈记录或类似的调试信息 。采用全局的异常处理器对异常进行处理,展现给浏览器端简单的错误信息 。这样会使攻击者更难发现和利用系统中的漏洞 。
33、不要自己做鉴权
对用户进行鉴权时可能会出现各种各样的问题:要抵御密码猜想攻击、用户枚举攻击,要管理密码重置、存储用户凭证,样样都不容易 。就像密码处理一样复杂,我们普通人还是不要尝试了 。
直接使用 auth0 等类似的工具来进行身份验证,采用一些广泛使用的、安全的软件模块来实现通信协议(常见的为) 。如果不想用 auth0 这类第三方的身份提供商,也可以自己搭建一个类似的服务来代替 。
34、对一切都进行鉴权,减少攻击面
应用系统要默认对一切都进行鉴权,除非是一些静态资源、异常页面或登出页面 。
35、采用多重身份认证
万一有人破解了身份认证服务呢?如果存在这种担忧,直接上多重身份认证(说人话也就是:除了密码以外,还需要手机验证码) 。这样就算身份认证服务被黑、攻击者可以冒充到任何人,还是无法知道手机收到的验证码 。
36、通过严格的权限控制,避免对数据或功能的未授权访问
权限控制虽不是件容易事,但也有妥善处理的方法:只要时刻记住不要在控制器方法中忘了对用户权限进行验证,从而带来用户越权的漏洞,包括:
为了进一步澄清权限管理工具,这里总结了一些要点:
37、采用合适的工具和技术,避免注入漏洞
注入类的漏洞有很多,而且都很相似,包括 SQL 注入、HTML 注入、XML 注入、XPath 注入、命令注入、SMTP 注入、响应注入等等 。名称不同但本质相同,相应地解决方法也类似:
这里不会深入太多细节,只要记住:不管你是什么协议,都谨记上面这点 。后面会列举一些常见的注入类漏洞 。