1.SQL注入:
原因:
SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令,当使用外部不可信任的数据作为参数进行数据库的增、删、改、查时,如果未对外部数据进行过滤,就会产生 SQL 注入漏洞。
解决方案:
具体的解决方案很多,但大部分都是基于一点:不信任任何外部输入。
所以,对任何外部输入都进行过滤,然后再进行数据库的增、删、改、查。
此外,适当的权限控制、不曝露必要的安全信息和日志也有助于预防 SQL 注入漏洞
2.XSS 攻击:
原因:
XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),简单的说就是攻击者通过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID 等,影响网站与用户数据安全。
当攻击者通过某种方式向浏览器页面注入了恶意代码,并且浏览器执行了这些代码。
比如:在一个文章应用中(如微信文章),攻击者在文章编辑后台通过注入 script
标签及 js
代码,后端未加过滤就保存到数据库,前端渲染文章详情的时候也未加过滤,这就会让这段 js
代码执行,引起 XSS 攻击。
解决方案:
一个基本的思路是渲染前端页面(不管是客户端渲染还是服务器端渲染)或者动态插入 HTML 片段时,任何数据都不可信任,都要先做 HTML 过滤,然后再渲染。
3.CSRF 攻击
原因:
CSRF 攻击全称跨站请求伪造(Cross-site Request Forgery),简单的说就是攻击者盗用了你的身份,以你的名义发送恶意请求。
一个典型的 CSRF 攻击有着如下的流程:
- 受害者登录
a.com
,并保留了登录凭证(Cookie) - 攻击者引诱受害者访问了
b.com
b.com
向a.com
发送了一个请求:a.com/act=xx
(浏览器会默认携带a.com
的 Cookie)a.com
接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求a.com
以受害者的名义执行了act=xx
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让
a.com
执行了自己定义的操作
解决方案:
-
阻止不明外域的访问
- 同源检测
- Samesite Cookie
-
提交时要求附加本域才能获取的信息
- CSRF Token
- 双重Cookie验证
双重Cookie采用以下流程:
- 在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串(例如
csrfcookie=v8g9e4ksfhw
)。 - 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中(接上例
POST https://www.a.com/comment?csrfcookie=v8g9e4ksfhw
)。 - 后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝
CSRF Token的防护策略分为三个步骤:
1.将CSRF Token输出到页面中
2.页面提交的请求携带这个Token
3.服务器验证Token是否正确
4.DDoS攻击
原因:
分布式拒绝服务(DDoS)攻击是一种恶意企图,通过大量互联网流量压倒目标或其周围的基础架构来破坏目标服务器,服务或网络的正常流量。DDoS攻击通过利用多个受损计算机系统作为攻击流量来源来实现有效性。
攻击者不断地提出服务请求,让合法用户的请求无法及时处理,这就是 DoS 攻击。
攻击者使用多台计算机或者计算机集群进行 DoS 攻击,就是 DDoS 攻击。
解决方案:
防止 DDoS 攻击的基本思路是限流,限制单个用户的流量(包括 IP 等)。
5. XXE 漏洞
原因:
XXE 漏洞全称 XML 外部实体漏洞(XML External Entity),当应用程序解析 XML 输入时,如果没有禁止外部实体的加载,导致可加载恶意外部文件和代码,就会造成任意文件读取、命令执行、内网端口扫描、攻击内网网站等攻击。
这个只在能够接收 XML 格式参数的接口才会出现。
解决方案:
- 禁用外部实体
- 过滤用户提交的XML数据
6.暴力破解
原因:
这个一般针对密码而言,弱密码(Weak Password)很容易被别人(对你很了解的人等)猜到或被破解工具暴力破解。
解决方案:
- 密码复杂度要足够大,也要足够隐蔽
- 限制尝试次数
7.HTTP 报头追踪漏洞
原因:
HTTP/1.1(RFC2616)规范定义了 HTTP TRACE 方法,主要是用于客户端通过向 Web 服务器提交 TRACE 请求来进行测试或获得诊断信息。
当 Web 服务器启用 TRACE 时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中 HTTP 头很可能包括 Session Token、Cookies 或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。
解决方案:
禁用 HTTP TRACE 方法。
8.信息泄露
原因:
信息泄露漏洞是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等
–Web服务器配置存在问题,导致一些系统文件或者配置文件暴露在互联网中;
–Web服务器本身存在漏洞,在浏览器中输入一些特殊的字符,可以访问未授权的文件或者动态脚本文件源码;
–Web网站的程序编写存在问题,对用户提交请求没有进行适当的过滤,直接使用用户提交上来的数据。
解决方案:
- 应用程序报错时,不对外产生调试信息
- 过滤用户提交的数据与特殊字符
- 保证源代码、服务器配置的安全
9.目录遍历漏洞
原因:
攻击者向 Web 服务器发送请求,通过在 URL 中或在有特殊意义的目录中附加 ../
、或者附加 ../
的一些变形(如 ..\
或 ..//
甚至其编码),导致攻击者能够访问未授权的目录,以及在 Web 服务器的根目录以外执行命令。
10.命令执行漏洞
原因:
命令执行漏洞是通过URL发起请求,在Web服务器端执行未授权的命令,获取系统信息,篡改系统配置,控制整个系统,使系统瘫痪等。
命令执行漏洞主要有两种情况:
–通过目录遍历漏洞,访问系统文件夹,执行指定的系统命令;
–攻击者提交特殊的字符或者命令,Web程序没有进行检测或者绕过Web应用程序过滤,把用户提交的请求作为指令进行解析,导致执行任意命令。
11.文件上传漏洞
原因:
文件包含漏洞是由攻击者向Web服务器发送请求时,在URL添加非法参数,Web服务器端程序变量过滤不严,把非法的文件名作为参数处理。这些非法的文件名可以是服务器本地的某个文件,也可以是远端的某个恶意文件。
解决方案:
- 在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件
- 限制相关目录的执行权限,防范
webshell
攻击