MitM中间人攻击
Man in the Middle
MitM中间人攻击会在消息发出方和接收方之间拦截双方通讯。
DNS欺骗
DNS Spoofing
DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。
会话劫持
Session Hijacking
当攻击者接管两台计算机之间的有效会话时,就会发生会话劫持。攻击者窃取有效的会话ID,以便侵入系统和窥探数据。
解决方案:
- 使用 SSH 创建安全通信通道
- 通过 HTTPS 连接传递身份验证 Cookies
- 实现注销功能,以便用户可以结束会话
- 成功登录后生成会话ID
- 在用户和 web 服务器之间传递加密数据
- 使用字符串或长随机数作为会话密钥
会话固定
Session fixation
会话固定攻击是指攻击者能够通过读取或设置用户的会话标识符,并使用该会话标志符仿冒该用户与服务器交互的一种行为。窃取用户的 Cookie 即是一种会话固定攻击。
DDoS分布式拒绝服务
Distributed Denial of Service
分布式拒绝服务攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发起请求,从而使受攻击方网络瘫痪的一种攻击方式。
详见 DDos
代码注入
通过将恶意代码作为应用程序的输入参数注入到应用程序中,从而达到控制目标主机或数据库的行为。
SQL注入
SQL Injection
如果程序根据用户输入的参数动态生成SQL语句并执行,黑客可通过传入恶意参数值注入自己定义的语句,使数据库执行任意自己需要的指令,实现数据窃取或入侵破坏。
命令注入(任意命令执行)
Command Injection
如果程序根据用户输入的参数动态生成系统命令并执行,黑客可通过传入恶意参数值注入自己定义的命令,从而控制服务器。
XSS跨站脚本
Cross Site Scripting
XSS是发生在目标用户的浏览器层面上的攻击方式,当浏览器渲染页面的过程中发生了不在预期内执行的JS代码时,就发生了XSS攻击。
详见 XSS
存储型XSS
存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器并存储在服务器中(不管是数据库、内存还是文件系统等),在用户下次请求页面的时候服务器返回XSS代码并在浏览器中运行。
反射型XSS
反射型XSS,也叫非持久型XSS,是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。
DOM XSS
DOM XSS代码不需要服务器端的解析响应的直接参与,而是通过浏览器端解析用户输入数据并执行导致。
CSRF跨站请求伪造
Cross Site Request Forgery
CSRF跨站请求伪造,也被称为 One Click Attack 或者 Session Riding ,通常缩写为 CSRF 或者 XSRF ,是一种通过伪造用户请求破坏网站的攻击方式。
详见 CSRF
SSRF服务器请求伪造
Server Side Request Forgery
SSRF服务端请求伪造。在服务器访问网页或者HTTP服务的场景,如果接收到的目标URL是解析到内网的,则服务器会尝试访问内网。因此黑客通过提交解析到内网的URL,服务器会帮黑客对内网进行攻击、扫描。
点击劫持
Click Hijacking
攻击者在恶意站点实现了一个和信任站点极其相似的恶意页面,然后在恶意页面的上层覆盖了一个信任站点的合法页面(通常采用 iframe 的方式),并将合法页面设置成透明态,诱导用户点击页面,这时实际触发的是合法页面上的事件。用户的操作被劫持到攻击者事先设计好的恶意按钮或链接上,从而导致用户敏感信息泄露、实施转账、添加权限或者删除记录等敏感操作。
文件上传下载读取漏洞
任意文件上传
Unrestricted File Upload
任意文件上传漏洞是由于 Web 应用程序在实现文件上传功能时对上传的文件缺少必要的检查,使得攻击者可上传任意文件。利用该漏洞,攻击者可以直接上传 webshell (WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门)、病毒、恶意脚本等各种危险文件,可能导致服务器权限被直接获取,从而危及整个系统的安全运行。
解决方案:
- 对用户上传的文件后缀采用白名单进行限制,且重命名文件名
- 限定文件上传目录,且该目录不允许解析动态脚本文件
- 更新 Web 服务器版本,防止解析漏洞
- 上传接口严格控制权限和认证,文件上传前必须验证用户身份
- 服务器端对 HTTP 包头的 MIME Type 和上传文件的大小也需要进行检查,文件上传校验不但要验证文件包头信息是否匹配,而且要验证文件后缀名,最后还要限制合适的文件大小
- 使用对象存储存放用户上传的文件,与Web容器隔离
任意文件读取
Unrestricted File Read
因 Web 程序提供的文件查看下载、附件下载等功能存在安全缺陷,导致通过修改文件路径就能够查看和下载任意文件,这些文件包括:源代码文件、系统文件( /etc/passwd
、C:/boot.ini
等)、配置文件( config.php
、 /WEB-INF/web.xml
、 web.config
等),造成网站敏感信息泄露,严重危害网站安全。
解决方案:
- 服务端过滤特殊字符,如:“.”、“/”、“\”
- 判断用户输入的参数的格式是否合法
- 指定文件类型白名单(如:jpg、gif、png、rar、zip、pdf、doc、xls、ppt等),禁止用户读取、下载白名单以外的文件
- 指定下载路径,禁止用户读取、下载指定目录以外的文件
任意文件包含
Unrestricted File Inclusion
Web 程序在引入文件时,由于传入的文件名没有经过合理的校验,或者检验被绕过,从而操作了预想之外的文件,导致意外的敏感信息泄露,甚至恶意的代码注入,使攻击者获取到网站服务器权限。
解决方案:
- 关闭危险的文件打开函数
- 过滤特殊字符,如:“.”、“/”、“\”
- 检测文件内容
任意URL跳转
某些业务场景(例如登录跳转、导航前进后退)会接受不信任的用户输入,并返回一个 302 响应或者 URL 重定向。因此攻击者通过操控输入的 URL ,可以欺骗用户跳转到不安全的页面,造成钓鱼攻击。
缓冲区溢出
Buffer Overflow
缓冲区溢出是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、并获取程序乃至系统的控制权的一种攻击行为。
钓鱼攻击
Phishing
攻击者伪装成受信任的实体欺骗受害者,通过发送邮件或者文件的方式,诱骗受害者暴露密码或者执行恶意代码。
安全加固手段
HTTPS
在用户请求资源时,如果请求的是 http 资源,则 302 重定向到 https 资源,并添加 Strict-Transport-Security
要求强制使用 HTTPS 协议。
输入验证
Validation
前端与后端均需进行输入验证,对用户的输入表单参数、URL参数、HTTP头进行校验。
需要校验参数类型,长度,范围,字符集合是否符合要求,同时需要根据业务类型校验参数。
常见的业务类型包括:日期、域名、ip、邮箱地址、用户名、手机号(带国际区号)、用户ID等。
对SQL注入、XSS、命令注入中常见的危险字符 <>'"%|;&/\
进行过滤或实体编码。
拼接URL时需要进行实体编码。
保证前后端校验方法一致。
数据脱敏
Data Mask
API 接口或 HTTP 服务如果没有对敏感信息进行脱敏输出,可能会被嗅探收集、批量爬取,泄漏业务核心数据。
需要脱敏的数据包括姓名、手机号、身份证号、银行卡号、邮箱、营业执照号等。
接口频率限制
Frequency Limiting
接口需要限制请求频率,防止对接口数据进行爬取或者对登录接口进行暴力破解。
核心数据接口要求权限认证。
加密
Encryption
- 密码在设定时要求二次输入验证,防止用户手动输入错误,二次输入禁止复制粘贴
- 在传输过程中可以进行 base-64 编码,防止在传输之前(例如devtools中)被查看
- 在存储时需要加盐加密,知名的不安全算法包括 MD5、SHA-1
多因子认证
Multi Factor Authentication
多因子认证是用两种及两种以上的条件对用户进行认证的方法。通常将口令和实物(如U盾、密码器、手机短信、指纹等)结合起来,以有效提升安全性。
验证码
Verification Code(CAPTCHA,Completely Automated Public Turing test to tell Computers and Humans Apart,全自动区分计算机和人类的图灵测试)
验证码是一种区分用户是计算机还是人的公共全自动程序,主要为了防止机器的暴力破解和批量提交。常见的人机识别方法包括文本识别验证、图片点选验证、滑块拼图验证、用户行为验证等。
Cookie安全
详见 Cookie
解决方案:
- 添加 HttpOnly 标志只允许服务器进行读取,防止xss攻击
- 添加 Secure 标志,采用 HTTPS 请求,防止被中间人获取
- 为了防止 Cookie 被篡改,服务器通常可以将 会话标志符 存储在 Cookie 中,而不是直接存储会话信息。这样,即使攻击者获取到了 Cookie 内容,如果不知道会话标志符编码解码规则,就无法进行修改。
- 如果站点使用 Cookie 对用户进行身份验证,则每当用户进行身份验证时,它都应重新生成并重新发送会话 Cookie,即使会话 Cookie 已经存在。
- 服务器不应该在同一主机的不同端口上运行互不信任的服务。
- 服务器不应该在同一主机的不同路径上运行互不信任的服务。
HTTP header 设置
解决方案:
- 通过设置
X-Frame-Option
告知浏览器该页面是否可以被嵌入,减少被 点击劫持 攻击的可能 - 通过设置
Content-Security-Policy
告知浏览器该页面的内容安全策略,减少被 XSS 攻击的可能 - 通过设置
Referrer-Policy
监管访问来源信息,减少来源地址探测 - 通过设置
Cross-Origin-Opener-Policy
Cross-Origin-Resource-Policy
Cross-Origin-Embedder-Policy
来减少跨源跳转/嵌入时的可能攻击 - 添加 csrf token ,减少被 CSRF 攻击的可能