1. SQL 注入

SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。

SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化。

原因

当使用外部不可信任的数据作为参数进行数据库的增、删、改、查时,如果未对外部数据进行过滤,就会产生 SQL 注入漏洞。

比如:

name ="外部输入名称";

sql = "select * from users where name=" + name;

上面的 SQL 语句目的是通过用户输入的用户名查找用户信息,因为由于 SQL 语句是直接拼接的,也没有进行过滤,所以,当用户输入 ''or'1'='1' 时,这个语句的功能就是搜索 users 全表的记录。

select * from users where name=''or''='';
解决方案

具体的解决方案很多,但大部分都是基于一点:不信任任何外部输入。

所以,对任何外部输入都进行过滤,然后再进行数据库的增、删、改、查。

此外,适当的权限控制、不曝露必要的安全信息和日志也有助于预防 SQL 注入漏洞。

参考文章: https://juejin.im/post/5bd5b820e51d456f72531fa8#heading-2

2. XSS 攻击

XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),简单的说就是攻击者通过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID 等,影响网站与用户数据安全。

XSS 攻击更偏向前端的范畴,但后端在保存数据的时候也需要对数据进行安全过滤。

原因

当攻击者通过某种方式向浏览器页面注入了恶意代码,并且浏览器执行了这些代码。

比如:

在一个文章应用中(如微信文章),攻击者在文章编辑后台通过注入 script 标签及 js 代码,后端未加过滤就保存到数据库,前端渲染文章详情的时候也未加过滤,这就会让这段 js代码执行,引起 XSS 攻击。

解决方案

一个基本的思路是渲染前端页面(不管是客户端渲染还是服务器端渲染)或者动态插入 HTML 片段时,任何数据都不可信任,都要先做 HTML 过滤,然后再渲染。

参考文章:https://segmentfault.com/a/1190000016551188#articleHeader7

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 执行了自己定义的操作

注:上面的过程摘自《前端安全系列之二:如何防止CSRF攻击?》(https://segmentfault.com/a/1190000016659945)。

解决方案

防止 CSRF 攻击需要在服务器端入手,基本的思路是能正确识别是否是用户发起的请求。

参考文章:https://segmentfault.com/a/1190000016659945#articleHeader4

4. DDoS 攻击

DoS 攻击全称拒绝服务(Denial of Service),简单的说就是让一个公开网站无法访问,而 DDoS 攻击(分布式拒绝服务 Distributed Denial of Service)是 DoS 的升级版。

这个就完全属于后端的范畴了。

原因

攻击者不断地提出服务请求,让合法用户的请求无法及时处理,这就是 DoS 攻击。

攻击者使用多台计算机或者计算机集群进行 DoS 攻击,就是 DDoS 攻击。

解决方案

防止 DDoS 攻击的基本思路是限流,限制单个用户的流量(包括 IP 等)。

参考文章:https://segmentfault.com/a/1190000016584829#articleHeader19

5. XXE 漏洞

XXE 漏洞全称 XML 外部实体漏洞(XML External Entity),当应用程序解析 XML 输入时,如果没有禁止外部实体的加载,导致可加载恶意外部文件和代码,就会造成任意文件读取、命令执行、内网端口扫描、攻击内网网站等攻击。

这个只在能够接收 XML 格式参数的接口才会出现。

解决方案
  1. 禁用外部实体

  2. 过滤用户提交的XML数据

参考文章:https://www.cnblogs.com/r00tuser/p/7255939.html

6. JSON 劫持

JSON 劫持(JSON Hijacking)是用于获取敏感数据的一种攻击方式,属于 CSRF 攻击的范畴。

原因

一些 Web 应用会把一些敏感数据以 json 的形式返回到前端,如果仅仅通过 Cookie 来判断请求是否合法,那么就可以利用类似 CSRF 的手段,向目标服务器发送请求,以获得敏感数据。

比如下面的链接在已登录的情况下会返回 json 格式的用户信息:

  http://www.test.com/userinfo

攻击者可以在自己的虚假页面中,加入如下标签:

  <script src="http://www.test.com/userinfo"></script>

如果当前浏览器已经登录了 www.test.com,并且 Cookie 未过期,然后访问了攻击者的虚假页面,那么该页面就可以拿到 json 形式的用户敏感信息,因为 script 标签会自动解析 json 数据,生成对应的 js 对象。然后再通过:

  Object.prototype.__defineSetter__

这个函数来触发自己的恶意代码。

但是这个函数在当前的新版本 Chrome 和 Firefox 中都已经失效了。

注:上面的过程摘自《JSON和JSONP劫持以及解决方法》(https://blog.csdn.net/yjclsx/article/details/80353754)

解决方案
  1. X-Requested-With 标识

  2. 浏览器 JSON 数据识别

  3. 禁止 Javascript 执行 JSON 数据

7. 暴力破解

这个一般针对密码而言,弱密码(Weak Password)很容易被别人(对你很了解的人等)猜到或被破解工具暴力破解。

解决方案
  1. 密码复杂度要足够大,也要足够隐蔽

  2. 限制尝试次数

8. HTTP 报头追踪漏洞

HTTP/1.1(RFC2616)规范定义了 HTTP TRACE 方法,主要是用于客户端通过向 Web 服务器提交 TRACE 请求来进行测试或获得诊断信息。

当 Web 服务器启用 TRACE 时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中 HTTP 头很可能包括 Session Token、Cookies 或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。

解决方案

禁用 HTTP TRACE 方法。

9. 信息泄露

由于 Web 服务器或应用程序没有正确处理一些特殊请求,泄露 Web 服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。

所以一般需注意:

  • 应用程序报错时,不对外产生调试信息

  • 过滤用户提交的数据与特殊字符

  • 保证源代码、服务器配置的安全

10. 目录遍历漏洞

攻击者向 Web 服务器发送请求,通过在 URL 中或在有特殊意义的目录中附加 ../、或者附加 ../ 的一些变形(如 ..\..// 甚至其编码),导致攻击者能够访问未授权的目录,以及在 Web 服务器的根目录以外执行命令。

11. 命令执行漏洞

命令执行漏洞是通过 URL 发起请求,在 Web 服务器端执行未授权的命令,获取系统信息、篡改系统配置、控制整个系统、使系统瘫痪等。

12. 文件上传漏洞

如果对文件上传路径变量过滤不严,并且对用户上传的文件后缀以及文件类型限制不严,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件( webshell),进而远程控制网站服务器。

所以一般需注意:

  • 在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件

  • 限制相关目录的执行权限,防范 webshell 攻击

13. 其他漏洞

  1. SSLStrip 攻击

  2. OpenSSL Heartbleed 安全漏洞

  3. CCS 注入漏洞

  4. 证书有效性验证漏洞

14. 业务漏洞

一般业务漏洞是跟具体的应用程序相关,比如参数篡改(连续编号 ID / 订单、1 元支付)、重放攻击(伪装支付)、权限控制(越权操作)等。

文章参考:https://blog.csdn.net/xueshao110/article/details/78912988

15. 框架或应用漏洞

  • WordPress 4.7 / 4.7.1:REST API 内容注入漏洞

  • Drupal Module RESTWS 7.x:Remote PHP Code Execution

  • SugarCRM 6.5.23:REST PHP Object Injection Exploit

  • Apache Struts:REST Plugin With Dynamic Method Invocation Remote Code Execution

  • Oracle GlassFish Server:REST CSRF

  • QQ Browser 9.6:API 权限控制问题导致泄露隐私模式

  • Hacking Docker:Registry API 未授权访问

web 应用常见安全漏洞的更多相关文章

  1. web端常见安全漏洞测试结果分析-- appscan

    基于appscan测试结果分析: 一.XSS跨站脚本 指的是攻击者往Web页面里插入恶意html代码,通常是JavaScript编写的恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被 ...

  2. Web系统常见安全漏洞及解决方案-SQL盲注

    关于web安全测试,目前主要有以下几种攻击方法: 1.XSS 2.SQL注入 3.跨目录访问 4.缓冲区溢出 5.cookies修改 6.Htth方法篡改(包括隐藏字段修改和参数修改) 7.CSRF ...

  3. Web开发常见的漏洞

    SQL注入漏洞 跨站脚本攻击漏洞 登陆后台管理页面 IIS短文件/文件夹漏洞 系统敏感信息泄露

  4. Web安全测试中常见逻辑漏洞解析(实战篇)

    Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...

  5. Web中间件 - 常见漏洞总结

    *文章来源:https://blog.egsec.cn/archives/472 *本文将主要说明:Web中间件常见漏洞的产生原因以及修复方案 什么是Web中间件? 百度百科是这样解释的:中间件是介于 ...

  6. Web安全常见漏洞修复建议

    转载地址:https://security.pingan.com/blog/17.html SQL注入 在服务器端要对所有的输入数据验证有效性. 在处理输入之前,验证所有客户端提供的数据,包括所有的参 ...

  7. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  8. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  9. 【转】PHP网站常见安全漏洞,及相应防范措施总结

    ---恢复内容开始--- 目前,基于PHP的网站开发已经成为目前网站开发的主流,本文笔者重点从PHP网站攻击与安全防范方面进行探究,旨在减少网站漏洞,希望对大家有所帮助! 一.常见PHP网站安全漏洞 ...

随机推荐

  1. 在linux(centos)系统安装nginx教程

    最近在切换服务器操作系统,简单记录一下 一.安装nginx需要如下环境  1.gcc  编译依赖gcc环境,如果没有gcc环境,需要安装gcc yum install gcc-c++  2.PCRE ...

  2. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  3. Python爬虫入门教程 47-100 mitmproxy安装与安卓模拟器的配合使用-手机APP爬虫部分

    1. 准备下载软件 介绍一款爬虫辅助工具mitmproxy ,mitmproxy 就是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Ch ...

  4. Django-restframework 之权限源码分析

    Django-restframework 之权限源码分析 一 前言 上篇博客分析了 restframework 框架的认证组件的执行了流程并自定义了认证类.这篇博客分析 restframework 的 ...

  5. EasyUI List<T>转tree数据格式

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  6. asp.net后台管理系统-登陆模块-路由权限控制_1

    using System.Web.Routing; //重写System.Web.Routing中Initialize方法 protected override void Initialize(Req ...

  7. OO第二单元总结

    这一单元作业是围绕电梯调度进行展开,并引进了多线程的概念.与第一次作业比较类似,作业难度也是逐渐推进,从最开始的单部电梯先来先服务(傻瓜式调度),到之后的单部电梯可稍带调度,到最后的多部电梯分楼层调度 ...

  8. Pipenv项目化你的python应用

    目录 Pipenv 什么是pipenv 安装pipenv pipenv用法 使用pipenv开发项目 pipenv 结合 pyenv Pipenv 什么是pipenv Pipenv is a prod ...

  9. mysql进阶知识

    一.存储引擎 引擎 指的是一个系统的核心部分 引擎有不同分类是为了适应不同的使用场景 查看mysql支持所有引擎 show engines; MRG_MYISAM 是一堆MYISAM表的集合 用于做水 ...

  10. JavaScript局部变量变量和函数命名提升

    之前接触了一些javascript局部变量命名提升的问题但是一直没有总结今天特地好好总结一下 变量提升 一个变量的作用域是程序源代码中定义的这个变量的区域.全局变量拥有全局作用域,在javascrip ...