// 每日前端夜话 第497篇
// 正文共:2000 字
// 预计阅读时间:7 分钟
Web 安全已经是 Web 开发中一个重要的组成部分,而许多程序猿往往希望专注于程序的实现,而忽略了信息安全的实质。如果没有严谨地考虑到信息安全问题,等出了乱子之后反而会造成更严重的损失。所以要在开发网络应用时更注重 Web 安全,甚至努力成为一个白帽子黑客。
一般来说 Web 安全需要符合三点安全要素:
以下是常见的影响 Web 安全的攻击手段:
使用恶意的 SQL 语法去影响数据库内容:
// “--” 是 SQL 语句的注释符号
/user/profile?id=1";DROP TABLE user--
SELECT * FROM USER WHERE id = "1"; DROP TABLE user--
用户登录:
// password" AND 1=1--
SELECT * FROM USER WHERE username = "Mark"; AND 1=1-- AND PASSWORD="1234"
不信任用户输入的数据,确保用户输入必须经过检查,目前许多成熟的 Web 框架都支持ORM 服务,大部分都基本防范了 SQL 注入。
XSS 也很容易将恶意代码植入到网页,让看到网页的用户受到干扰,常见的重灾区包括BBS、留言板等。实际上 XSS 的概念很简单,通过表单输入建立一些恶意网址、恶意图片网址或把 JavsScript 代码注入到 HTML中,当用户浏览页面时就会被触发。
<IMG SRC=""onerror="alert('XSS')">
更多关于XSS资料可以参考 XSS Filter Evasion Cheat Sheet【https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet】。另外也有中文版(链接是乌云镜像备份,顺便怀念一下)【https://wooyun.js.org/drops/XSS%20Filter%20Evasion%20Cheat%20Sheet%20%E4%B8%AD%E6%96%87%E7%89%88.html】
不信任用户输入的任何资料,将所有输入内容编码并过滤。
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 元。
DoS 攻击具体可以分为两种形式:带宽消耗型以及资源消耗型,它们都是通过大量合法或伪造的请求大量消耗网络以及硬件资源,以达到瘫痪网络和系统的目的。
带宽消耗型又分为分布式拒绝服务攻击和放大攻击:分布式拒绝服务攻击的特点是利用僵尸网络向受害者的服务器发送大量流量,目的在于占用其带宽。放大攻击和分布式拒绝服务攻击类似,是通过恶意放大流量限制受害者系统的带宽;其特点是利用僵尸网络通过伪造的源 IP(即攻击目标)向某些存在漏洞的服务器发送请求,服务器在处理请求后向伪造的源 IP 传送应答包,由于这些服务的特殊性导致应答包比请求包更大,因此只使用少量的带宽就可以使服务器器传送大量的响应到目标主机上。
资源消耗型又分为协议分析攻击(SYN Flood)、LAND攻击、CC攻击、僵尸网络攻击,应用程序级洪水攻击(Application level floods)等。
许多 web 应用都允许用户把文件上传到服务器,由于我们不知道用户会上传什么类型的文件,如果不加注意的话就会引发很大的问题。
大多数网站都会提供会员注册的功能,要注意不要将密码的明文存入数据库。要如果你所登陆的网站在你忘记密码时,取回口令的功能会把密码明文发到你的邮箱,那么这个网站十有八九是没有做加密或者是用的是可逆加密算法。这时你的密码很容易会出现在“我的密码没加密”(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)检查一下有哪些安全事项是被你忽略掉的。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有