Web开发者安全速查表

标签: WEB安全 | 发表时间:2017-05-24 14:00 | 作者:Alpha_h4ck
出处:http://www.freebuf.com

想要开发出一个安全的、健壮的Web应用其实是非常困难的,如果你觉得这实现起来非常简单的话,那么你一定是一个X炸天的程序猿,要么你就是在白日做梦……

1.png

写在前面的话

如果你觉得你可以在一个月之内开发出一款集使用价值、用户体验度、以及安全性为一身的产品,那么在你将产品原型真正推上市场之前,请一定要三思啊!

当你仔细核查了本文给出的安全小贴士之后,你可能会发现你在产品的开发阶段跳过了很多重要的安全步骤。有的时候,也许你应该对你的用户坦诚一点,你应该诚实地告诉他们这款产品还没有完全搞定,还有很多的安全问题亟待解决。

下面的这份速查表非常简洁,而且绝对还有很多东西没有涉及到。就我个人而言,我从事安全Web应用开发工作已经超过14年了,而本文给出的小贴士都是让我在过去一段时间里曾痛苦不堪的重要安全问题。我希望大家可以认真对待,不仅是对用户负责,也要对自己的职业生涯负责。

数据库篇

1.    对类似访问令牌、电子邮箱地址或账单详情进行加密处理,尤其是用户的身份识别信息(密码)。

2.    如果你的数据库支持低成本加密,请确保开启这项功能并保护主机磁盘中的数据。与此同时,确保所有的备份文件都进行了加密存储。

3.    按照最小权限原则给数据库访问账号分配权限,不要使用数据库的root账号。

4.    使用密钥存储器来保存或派发密钥,不要直接将密钥硬编码在你的应用之中。

5.    通过使用SQL预处理语句来避免SQL注入攻击。比如说,如果你使用的是NPM,那么请不要使用npm-mysql,你应该用的是npm-mysql2,因为它支持SQL预处理语句。

开发篇

1.    确保你软件中所有组件的每一个版本都进行了漏洞扫描,包括接口、协议、代码以及数据包。

2.    对产品中所有使用到的第三方工具时刻保持警惕性,选择一款安全系数较高的开发平台。

身份验证篇

1.    使用合适的加密算法(例如bcrypt)来计算并存储密码哈希,在初始加密时选择合适的随机数据,还有就是千万不要自己去写一个加密算法。

2.    使用简单但健壮的密码规则,以鼓励用户设置长度足够安全的随机密码。

3.    在服务的登录机制中引入多因素身份验证功能。

DoS保护篇

1.    确保那些针对API的DoS攻击不会严重影响你网站的正常运行,至少要限制API的请求访问速率。

2.    对用户所提交的数据和请求进行结构和大小的限制。

3.    使用类似 CloudFlare这样的缓存代理服务来为你的Web应用添加 DDoS缓解方案

2.png

Web流量篇

1.    使用TLS,不只是你的登录表单和网站响应数据,而是你的整个网站都应该使用TLS。

2.    Cookie必须为httpOnly。

3.    使用CSP(内容安全策略),虽然配置过程比较麻烦,但这觉得是值得的。

4.    在客户端响应中使用X-Frame-Option和X-XSS-Protection头。

5.    使用HSTS响应,使用HTTPS。

6.    在所有的表单中使用CSRF令牌。

API篇

1.    确保你所有的公共API中没有可以枚举的资源。

2.    确保用户在使用你的API之前,对他们的身份进行验证。

验证篇

1.    在客户端对用户的输入进行验证,并即使给予反馈(Ajax),但永远不要相信用户输入的数据。

2.    在服务器端再对用户所输入的每一个字符进行一次彻底的验证,永远不要直接将用户输入的内容注入到响应数据中,永远不要直接在SQL语句中插入用户提供的数据。

云端配置篇

1.    确保所有的服务只开启必要的端口,关闭不用的端口,并对常用端口进行强制性的安全保护,因为通过非标准端口来进行攻击对于攻击者而言相对来说是比较困难的。

2.    确保服务器后台数据库和后台服务无法通过公网查看到。

3.    在单独的VPC节点配置逻辑服务或提供服务内通信。

4.    确保所有的服务只接受来自有限IP地址的数据。

5.    限制输出数据的IP地址以及端口。

6.    使用AWS IAM角色,不要使用root凭证。

7.    对所有的管理员和开发人员提供最小的访问权限。

8.    定期更换密码和访问密钥。

基础设施篇

1.    确保可以在主机不下线的情况下进行更新操作,确保部署了全自动化的软件更新策略。

2.    使用类似Terraform这样的工具来创建所有的基础设施,不要使用云端console(控制台)来进行创建。

3.    对所有服务的日志进行集中记录,不要通过SSH来访问或获取日志。

4.    不要让AWS服务组的端口22保持开启状态。

5.    一定要部署入侵检测系统。

操作篇

1.    关闭不用的服务和服务器,因为最安全的服务器是那些关闭着的服务器。

测试篇

1.    开发完成之后,对你的设计和代码实现进行多次安全审查。

2.    进行渗透测试,也就是自己黑自己,但你也要让别人来对你的网站进行渗透测试。

计划篇

1.    创建一个安全威胁模型,用来描述你可能会遇到的威胁以及攻击者。

2.    设计一个安全应急响应方案,你总有一天会用到的。

3.png

篇尾语

如果你觉得这个清单遗漏了什么的话,欢迎在文章下方的评论区留言补充,安全社区的壮大需要大家的共同努力。

* 参考来源: simplesecurity, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

相关 [web 开发 安全] 推荐:

Web开发框架安全杂谈

- goodman - 80sec
最近框架漏洞频发,struts任意代码执行、Django csrf token防御绕过、Cakephp代码执行等等各大语言编程框架都相继暴出高危漏洞,这说明对于编程框架的安全问题已经逐渐走入安全工作者的视线. Web开发框架就相当于web应用程序的操作系统,他决定了一个应用程序的模型结构和编程风格.

从“黑掉Github”学Web安全开发

- - 酷 壳 - CoolShell.cn
Egor Homakov(Twitter:  @homakov 个人网站:  EgorHomakov.com)是一个Web安全的布道士,他这两天把github给黑了,并给github报了5个安全方面的bug,他在他的这篇blog——《 How I hacked Github again》(墙)说明了这5个安全bug以及他把github黑掉的思路.

web开发中的线程安全

- - 编程 - 编程语言 - ITeye博客
在web开发中,要关注由于并发访问所导致的对某一同一个值的修改,否则信息会造成泄漏servlet是在多线程环境下的. 即可能有多个请求发给一个servelt实例,每个请求是一个线程. struts下的action也类似,同样在多线程环境下. 译:为多线程环境编写代码. 我们的controller servlet指挥创建你的Action 类的一个实例,用此实例来服务所有的请求.

Web开发者安全速查表

- - FreeBuf.COM | 关注黑客与极客
想要开发出一个安全的、健壮的Web应用其实是非常困难的,如果你觉得这实现起来非常简单的话,那么你一定是一个X炸天的程序猿,要么你就是在白日做梦……. 如果你觉得你可以在一个月之内开发出一款集使用价值、用户体验度、以及安全性为一身的产品,那么在你将产品原型真正推上市场之前,请一定要三思啊. 当你仔细核查了本文给出的安全小贴士之后,你可能会发现你在产品的开发阶段跳过了很多重要的安全步骤.

安全隐患名录-Web

- - Onlycjeg's Blog
[0day储藏室出品]安全隐患名录-Web. 本文档是基于OWASP TOP 10写成,描述了OWASP TOP 10中所讲到的风险并对其进行风险等级鉴定,漏洞描述,漏洞危害,测试方法,测试过程对系统的影响以及修复方法. 在做项目的过程中,我们所面对的更多的是生产系统,并不是所有的企业都存在测试服务器.

Web开发入门(转载)

- linchanx - Starming星光社最新更新
Web应用的竞争异常激烈,开发难度也是入门容易做好很难,所以第一次开发的应用不成功是很正常的事情. 不过这正是一个积累的过程,反正你需要的只是电脑和少量服务器经费,所以多磨练几次,水平自然会提高. 2, 习惯阅读及查阅英文资料. 前沿信息基本源自美国,翻译的东西不及时,不全,很多水平不高,再加之中文原创资料毕竟很有限,因此是否能熟练地查阅英文资料决定了你获取信息的 及时性和质量.

Spring MVC 与 web开发

- - 码蜂笔记
项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开发环境,我会怎么做. 下面就是我的想法,只关注于 MVC 的 View 层. 现在基本上都是用 ajax 来调用后台接口,拿到 json格式的数据再展示,有的人直接返回数据,却没有考虑异常的情况,我觉得返回的报文里必须包含表示可能的异常信息的数据和业务响应数据.

web开发利器之grunt

- - CSDN博客Web前端推荐文章
grunt不难,它主要依赖的是nodeJS的npm包管理器,和一个JSON及一个JS文件,先说说npm包管理器,玩过nodeJS的对它应该都很熟悉,在这里我们只需要安装nodeJS即可(新版的nodeJS基本都集成了npm),至于nodeJS的安装可以 点这里,这这篇文章就不做详细介绍,安装完后打开命令管理器(nodeJS安装完后的终端)输入:.

[转][转]浅谈php web安全

- - heiyeluren的Blog
来源: http://www.phpben.com/?post=79. 首先,笔记不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记、细心总结文章,里面有些是我们phper不易发现或者说不重视的东西. 在大公司肯定有专门的web安全测试员,安全方面不是phper考虑的范围. 但是作为一个phper对于安全知识是:“ 知道有这么一回事,编程时自然有所注意”.

华为内部的Web安全原则

- - 服务器运维与网站架构|Linux运维|X研究
Web安全原则 1.认证模块必须采用防暴力破解机制,例如:验证码或者多次连续尝试登录失败后锁定帐号或IP. 说明:如采用多次连续尝试登录失败后锁定帐号或IP的方式,需支持连续登录失败锁定策略的“允许连续失败的次数”可配置,支持在锁定时间超时后自动解锁. 2.对于每一个需要授权访问的页面或servlet的请求都必须核实用户的会话标识是否合法、用户是否被授权执行这个操作,以防止URL越权.