本文转载自微信公众号“前端先锋”(jingchengyideng)。
Web 安全已经是 了Web 开发中一个重要的组成部分,而许多程序猿往往希望专注于程序的实现,而忽略了信息安全的实质。如果没有严谨地考虑到信息安全问题,等出了乱子之后反而会造成更严重的损失。所以要在开发 *** 应用时更注重 Web 安全,甚至努力成为白帽黑客。
常见 Web 信息安全
一般来说 Web 安全需要三个安全要素:
- 保密性:通过加密等 *** 确保数据的保密性
- 完整性:要求用户获得的信息是完整的,不能篡改
- 可用性:确保网站服务的持续可访问性
以下是常见的影响 Web 安全攻击:
1. SQL注入
恶意 SQL 语法影响数据库内容:
用户登录:
简单的预防措施:不信任用户输入的数据,确保用户输入必须检查,许多成熟的 Web 框架支持ORM 服务,大部分基本防范 SQL 注入。
2. XSS(Cross-Site Scripting)
XSS 也很容易在网页上植入恶意代码,干扰看到网页的用户。常见的重灾区包括BBS、留言板等。实际上 XSS 的概念非常简单通过表单输入建立恶意网站、恶意图片网站或 JavsScript注入 代码HTML当用户浏览页面时,被触发。
简单的预防 *** :不信任用户输入的任何信息,编码并过滤所有输入内容。
3. CSRF
CSRF又称 one-click attack 或者 session riding,通常缩写为CSRF 或 XSRF。 已登录Web 在应用中执行非初衷操作的攻击 *** 。
例如,如果一家银行实施转账操作 URL 地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=10000&for=PayeeName
恶意攻击者可以在另一个网站上放置以下代码:
如果用户的登录信息未过期,将损失 1万 元。
简单的预防措施:
(1) 检查 Referer 头字段
这是一种基本的验证 *** ,通常 HTTP 头上有个 Referer 字段,其值应与请求位置在同一个域下,因此可以通过验证网站是否相同来验证是否是恶意请求,但可以伪造。
(2) 添加验证 token
现在许多 Web 所有框架都提供在表单中添加服务器生成的随机验证 CSRF 代码可以帮助防止 CSRF 攻击。
4. DoS
DoS 攻击可分为两种形式:带宽消耗型和资源消耗型。它们都要求大量的合法或伪造的 *** 和硬件资源来瘫痪 *** 和系统。
带宽消耗类型分为分布式拒绝服务攻击和放大攻击:分布式拒绝服务攻击的特点是利用僵尸 *** 向受害者的服务器发送大量流量,以占用其带宽。放大攻击类似于分布式拒绝服务攻击,通过恶意放大流量限制受害者系统的带宽;僵尸 *** 通过伪造的源 IP(即攻击目标)向某些有漏洞的服务器发送请求,服务器在处理请求后向伪造的源 IP 传输应答包,由于这些服务的特殊性,应答包比请求包大,所以服务器只能通过使用少量带宽向目标主机传输大量响应。
资源消耗分为协议分析攻击(SYN Flood)、LAND攻击、CC攻击,僵尸 *** 攻击,应用程序级洪水攻击(Application level floods)等。
简单的预防措施:
- 防火墙 设定规则阻止简单攻击
- 大多数交换机都有限制访问的控制功能
- 大多数交换机都有限制访问的控制功能
- 黑洞启动 将请求转发到不存在的位置
5. 文件上传漏洞
许多 web 应用程序允许用户将文件上传到服务器,因为我们不知道用户会上传什么类型的文件,如果我们不注意,就会造成很大的问题。
简单的预防措施:
(1)防止非法文件上传
- 设置文件名白名单
- 判断文件标头
(二)防止非法文件执行
- 存储目录和 Web 应用分离
- 存储目录没有执行权限
- 文件重命名
- 图片压缩
(3) 加密安全
6. 加密安全
大多数网站将提供会员注册功能。注意不要将密码的明文存储在数据库中。如果您登录的网站在您忘记密码时会将密码的明文发送到您的电子邮件中,则该网站十有八九没有加密或使用可逆加密算法。此时,您的密码很容易出现“我的密码没有加密”(http://plainpass.com/)这个网站。然而,即使加密密码也可能不安全。网上有很多破解网站(http://www.cmd5.com/),加密密码可以通过使用彩虹表来破解。因此, 通常是为不同的用户随机生成的salt 字符串加盐字符串,以提高密码的强度。
入侵过程简单:
- 侦查(Reconnaissance) 攻击者在攻击前准备调查行为,使用搜索引擎或社会工作者寻找目标信息,方便后续攻击
- 扫描(Scanning) 扫描目标主机的弱点,获取服务器操作系统、服务和运行状态等相关信息
- 获取权限(Gaining Access) 利用系统弱点获得服务器权限
- 维护权限(Maintaining Access) 维护当前获得的权限,以便将来再次操作
- 清除痕迹(Clearing Tracks) 清除入侵痕迹
总结
随着 *** 技术的发展,信息安全将变得越来越重要。当系统上线时,更好遵循信息安全检查清单
(https://github.com/FallibleInc/security-guide-for-developers/blob/master/security-checklist.md)检查你忽略了哪些安全事项。