本文转载自微信公众号“前端先锋”(jingchengyideng)。
Web 安全已经是 Web 开发中一个重要的组成部分,而许多程序猿往往希望专注于程序的实现,而忽略了信息安全的实质。如果没有严谨地考虑到信息安全问题,等出了乱子之后反而会造成更严重的损失。所以要在开发网络应用时更注重 Web 安全,甚至努力成为一个白帽子黑客。
常见 Web 信息安全
一般来说 Web 安全需要符合三点安全要素:
以下是常见的影响 Web 安全的攻击手段:
1. SQL注入
使用恶意的 SQL 语法去影响数据库内容:
- // “--” 是 SQL 语句的注释符号
- /user/profile?id=1";DROP TABLE user--
- SELECT * FROM USER WHERE id = "1"; DROP TABLE user--
用户登录:
- // password" AND 11=1--
- SELECT * FROM USER WHERE username = "Mark"; AND 11=1-- AND PASSWORD="1234"
简单的防范手段:不信任用户输入的数据,确保用户输入必须经过检查,目前许多成熟的 Web 框架都支持ORM 服务,大部分都基本防范了 SQL 注入。
2. XSS(Cross-Site Scripting)
XSS 也很容易将恶意代码植入到网页,让看到网页的用户受到干扰,常见的重灾区包括BBS、留言板等。实际上 XSS 的概念很简单,通过表单输入建立一些恶意网址、恶意图片网址或把 JavsScript 代码注入到 HTML中,当用户浏览页面时就会被触发。
- <IMG SRC=""onerror="alert('XSS')">
简易的防范手段方式:不信任用户输入的任何资料,将所有输入内容编码并过滤。
3. CSRF
CSRF 跨站请求伪造又被称为 one-click attack 或者 session riding,通常缩写为CSRF 或 XSRF。在已登录的 Web 应用上执行非本意的操作的攻击方法。
举一个例子:假如一家银行执行转帐操作的 URL 地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=10000&for=PayeeName
那么,一个恶意攻击者可以在另一个网站上放置如下代码:
- <img src="http://www.examplebank.com/withdraw?account=Mark&amount=10000&for=Bob">
如果用户的登录信息尚未过期的话,就会损失 10000 元。
简单的防范手段:
(1) 检查 Referer 头字段
这是比较基本的验证方式,通常 HTTP 头中有一个 Referer 字段,它的值应该和请求位置在同一个域下,因此可以通过验证网址是否相同来验证是不是恶意请求,但是有被伪造的可能。
(2) 添加验证 token
现在许多 Web 框架都提供在表单加入由服务器生成的随机验证 CSRF 的代码,可以辅助防止 CSRF 攻击。
4. DoS
DoS 攻击具体可以分为两种形式:带宽消耗型以及资源消耗型,它们都是通过大量合法或伪造的请求大量消耗网络以及硬件资源,以达到瘫痪网络和系统的目的。
带宽消耗型又分为分布式拒绝服务攻击和放大攻击:分布式拒绝服务攻击的特点是利用僵尸网络向受害者的服务器发送大量流量,目的在于占用其带宽。放大攻击和分布式拒绝服务攻击类似,是通过恶意放大流量限制受害者系统的带宽;其特点是利用僵尸网络通过伪造的源 IP(即攻击目标)向某些存在漏洞的服务器发送请求,服务器在处理请求后向伪造的源 IP 传送应答包,由于这些服务的特殊性导致应答包比请求包更大,因此只使用少量的带宽就可以使服务器器传送大量的响应到目标主机上。
资源消耗型又分为协议分析攻击(SYN Flood)、LAND攻击、CC攻击、僵尸网络攻击,应用程序级洪水攻击(Application level floods)等。
简易的防范手段:
5. 文件上传漏洞
许多 web 应用都允许用户把文件上传到服务器,由于我们不知道用户会上传什么类型的文件,如果不加注意的话就会引发很大的问题。
简单的防范手段:
(1) 阻止非法文件上传
(2) 阻止非法文件执行
(3) 加密安全
6. 加密安全
大多数网站都会提供会员注册的功能,要注意不要将密码的明文存入数据库。要如果你所登陆的网站在你忘记密码时,取回口令的功能会把密码明文发到你的邮箱,那么这个网站十有八九是没有做加密或者是用的是可逆加密算法。这时你的密码很容易会出现在“我的密码没加密”(http://plainpass.com/)这个网站上。不过即使将密码加密也未必安全,网上存在大量的破解网站(http://www.cmd5.com/),使用彩虹表就可以破解加密的密码。所以一般会针对不同用户使用随机产生的 salt 字符串加盐只后再进行加密的方式来提高密码的强健性。
- sha3(salt + gap + password)
简单的入侵流程:
总结
随着网络技术的发展,信息安全会越来越重要,当有系统上线时,最好按照《信息安全检查清单》
(https://github.com/FallibleInc/security-guide-for-developers/blob/master/security-checklist.md)检查一下有哪些安全事项是被你忽略掉的。
1.不想理我可以直接说,不要让我去猜,这样很累。 2.自从放了假,过着吃了睡,...
1.只是因为在人群中多看了他一眼,他就让你上黑板答题。 2.就算我们关系再好,...
拐点,是个数学上的术语,它是指改变曲线向上或向下方向的点,直观地说就是过了...
在过去的十年里,越来越多的人可以在金融市场上进行交易。过去投资是富人的专利...
2020年7月,谷歌安全研究人员向高通报告了一个高通芯片集漏洞,攻击者利用该芯片...
这样的大提速应该是人类发展史上的一个标志性大事件,它的意义将来会越来越清楚...
1. 外部数据安全 外部存储通常是指将数据存入到设备的SD卡上。 外部存储是一种不...
1.不是爱情不肯放过你,不是回忆不肯放过你,不是宿命不肯放过你,而是你自己不...
2020年8月,商务部印发《全面深化服务贸易创新发展试点总体方案》,明确在京津冀...
1.看见他发了一条状态,想回复表达关心,却发现。已经有了一大片的回复,于是就...