Web开发常见安全问题及解决

2023-11-05

Web攻击动机:

  • 恶作剧;
  • 关闭Web站点,拒绝正常服务;
  • 篡改Web网页,损害企业名誉;
  • 免费浏览收费内容;
  • 盗窃用户隐私信息,例如Email;
  • 以用户身份登录执行非法操作,从而获取暴利;
  • 以此为跳板攻击企业内网其他系统;
  • 网页挂木马,攻击访问网页的特定用户群;
  • 仿冒系统发布方,诱骗用户执行危险操作,例如用木马替换正常下载文件,要求用户汇款等

1.SQL注入(SQL Injection)

定义
由于程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
原因分析
其本质是对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。
由于我们的部分WEB应用,采用Jsp+JavaBean或SSH框架,代码中会有直接写SQL(或HQL)语句,而有些SQL是用拼串实现的。
风险
SQL盲注:如果系统屏蔽了详细的错误信息,那么对攻击者而言就是盲注入,可能会查看、修改或删除数据库条目和表
使用SQL注入的认证旁路:可能会绕开 Web 应用程序的认证机制
例子:
              

预防措施

  • 严格限定参数类型,明确参数检验的边界,必须在服务端执行数据验证
  • 采用参数化查询的方法(推荐)
  • 内置过滤系统(本质是黑名单,很常见但是不推荐)
  • 数据库加固

2.跨站脚本漏洞(XSS) 

定义
  它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。


分类
持久型XSS(Persistent),与非持久型XSS相反,它是指通过提交恶意数据到服务器,通过Web应用程序输出恶意数据输出到页面,持久型XSS多出现在Web邮箱、BBS、社区等从数据库读出数据的正常页面(比如BBS的某篇帖子中可能就含有恶意代码)
非持久型XSS(Non-persistent),即反射型,它是指那些浏览器每次都要在参数中提交恶意数据才能触发的跨站脚本漏洞。

例子:


预防措施

一.过滤:

  • 有时候过滤会导致意外的结果,例如alice’s 变成了alices。
  • 有时候需要多次过滤,例如<scrip<script>t>过滤掉<script>后还是<script>。
  • 需要注意多个过滤器的先后次序。当多个过滤器一起生效时,有可能后进行的过滤导致前面的过滤失效。例如过滤器1要过滤ABC,过滤器2要过滤DEF,那么ABDEFC在依次通过1,2过滤器后变成了ABC,这样相当于绕开过滤器1。

二.输入编码:

  • 输入编码往往可以有全局的解决方案,从设计的角度来看,这是最佳的。
  • 一旦数据已经入库,就难以用输出编码处理。

三.输出编码:

  • 输出编码有助于开发者细粒度控制输出,但也导致了工作量的增加。
  • 输出编码可以解决输入编码无法处理的已入库数据。

四.用户安全加固:

  • 小心点击来源不明的URL。
  • 对浏览器进行安全加固,例如禁止ActiveX。
  • 永远不要点击自动登录信息!

3.跨站请求伪造(XSRF )

风险
     可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务 
原因分析
   应用程序使用的认证方法不充分
典型攻击方式
  •  在页面中加入一个<img>标签,浏览器就会发送一个请求,以获取其src属性引用的值。
  •  攻击者将敏感操作的URI作为src
  •  继承Cookie,以浏览者的身份作敏感访问并操作
  •  危害:在用户无意识情况下进行危险操作

预防措施

检查 HTTP 头部 Refer 信息
   Server端在收到请求之后,可以去检查这个头信息,只接受来自本域的请求而忽略外部域的请求
使用一次性令牌
   每个请求都带上一个由服务器生成的随机参数。然后在服务器端核对该参数,如果和下发的随机数不同,则可以认为有人在伪造请求。因为攻击者无法知道他本次攻击的http请求需要带什么样的随机数才是有效的。
使用验证图片
   图片验证信息很难被恶意程序在客户端识别,因此能够提高更强的保护
判断HTTP请求类型
    采用request.getMethod()判断请求的方式是否POST
直接获取数据
对request再次封装,直接获取form的数据不接收URL的 ,request.getForm(“user”)

4.文件上传漏洞

常见的验证错误

  • 允许上传可执行文件
  • 使用客户端JS验证上传文件类型
  • 使用黑名单限制上传文件类型
  • 文件名/存储目录名可自定义
  • 文件名中特殊字符处理不当

预防措施

  • 首先编码者需要对上传页面代码严格把关,特别是在保存文件的时候,考察可能出现的异常字符,如../,..\,空字符等。
  • 其次,对文件扩展名检查要采取“允许jpg,gif…”这样的检查,而不要采取“不允许asp…”这样的检查;
  • 最好对上传文件的目录设置不可执行,这可以通过web服务器配置加固实现。








本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web开发常见安全问题及解决 的相关文章

  • python倒序遍历字符串

    Hello大家好 今天我想和大家分享一个小tips 就是快速倒序遍历字符串 比如现在有一个小需求 是让我们找到一个长字符串里面的最后一个单词 并且返回这个单词的长度 每个单词用空格隔开 那么我们会如何去做这道题呢 我觉得使用倒序遍历 当如果

随机推荐

  • VS2017学习C++问题二(没有与这些操作数匹配的 “<<“ 运算符)

    添加要在此处预编译的标头 ifndef GZDEMO H define GZDEMO H pragma once include
  • 【javascript】2048小游戏

    目录 什么是2048 游戏状态机 游戏界面绘制 3 1 界面 3 2 数字的背景颜色 分数逻辑 4 1 加分 4 2 更新最高分 方向控制逻辑 5 1 数组 5 2 随机数 5 3 初始化 5 4 判断数组是否全部填满 5 5 判断方格是否
  • vue img video src动态设置

    图片存放位置 前端 img data中 url created中 created this select method中 async select var data res await this axios get select this
  • 手写Spring框架(二)

    目录 IOC相关类 BeanDefinitionReader BeanDefinition ApplicationContext BeanWrapper 简化后的DispatcherServlet 本章源码 https github com
  • nodejs require() of ES Module xxxxx not supported.

    某些 npm 库在 typescript 中使用时会存在这种情况 说一个解决方法 就是在 npm 官网中查看对应库的 version 看看是否有 cjs 版本 或者回退到上一个大版本
  • Java面试面经大合集(含答案),大厂越来越简单进了,

    Java面试笔记 尝到甜头的他开始得寸进尺 说5K的工资在北京根本生活不下去 没办法 我这人就是心软 在他一顿苦苦哀求后就答应再帮他想想办法 开会的时候灵光一闪想到了在阿里内部给他找两份大佬写的面试笔记 于是就有了最开始的一幕 被大佬逮到的
  • 前缀和实例4(和可被k整除的子数组)

    题目 给定一个整数数组 nums 和一个整数 k 返回其中元素之和可被 k 整除的 连续 非空 子数组 的数目 子数组 是数组的 连续 部分 示例 1 输入 nums 4 5 0 2 3 1 k 5 输出 7 解释 有 7 个子数组满足其元
  • 三个方法解决php并发问题

    福利 网络安全重磅福利 入门 进阶全套282G学习资源包免费分享 解决php并发问题的方法有很多 具体可以使用MySQL的行级锁 乐观锁和Redis的分布式锁等技术来解决 此外 还可以使用消息队列 多进程 多线程等技术来解决php并发问题
  • 人机交互-2-交互设计的原则与方法

    交互设计的原则与方法 交互设计中的问题 尽量减少用户需要记忆的部分 缺乏反馈 1 目标Goal vs 意图Intention 单个目标可对应多个意图 举例 删除文档中的部分内容的目标 意图1 通过编辑菜单删除 意图2 通过删除按钮删除 每个
  • CTF_Web_[GXYCTF2019]Ping Ping Ping

    一 题目 Ping Ping Ping 二 靶机信息链接 靶机信息 剩余时间 10072s http 70284b15 7c4e 4548 8b04 aadbc6e669f5 node4 buuoj cn 81 三 靶机链接页面 四 分析
  • Hector-SLAM初使用

    Hector SLAM初使用 首先把二维雷达的包拷贝到笔记本上 编译一次通过 连接也没有问题 rviz中可以看到原始激光 想演示一下二维激光雷达的SLAM建图 Hector SLAM相对比较容易 主要参考了下面的几篇博客 SLAM hect
  • 如何使用PowerDesigner软件进行数据库设计(多对多关系)

    如何使用PowerDesigner软件进行数据库设计 多对多关系 1 多对多关系示例 2 创建CDM 3 建立实体之间的联系 4 检查CDM 5 将CDM转换成PDM 6 由PDM生成sql文件 1 多对多关系示例 1 表名和字段 学生表
  • Spark Schema、Hive和Python的数据类型关系,以及Pyspark数据类型详解

    文章目录 1 概念阐述 1 1 Spark中支持的数据类型 1 2 Spark中的基本类型与Python数据类型 Hive表数据类型的对应关系 1 3 Hive中数字类型各自的表示范围 2 分类型介绍每种数据类型的详情 2 1 数字类型 B
  • 程序员保命技能,Mysql bin_log数据恢复,你还不知道吗?

    大家好我是迷途 一个在互联网行业 摸爬滚打的学子 热爱学习 热爱代码 热爱技术 热爱互联网的一切 无论你是正在路上的旅人 还是背上行囊 整装待发的学子 都可以点赞关注一下帅途的动态 当然如果帅途拿到比较好的学习资料或者看见比较好的文章也会第
  • 创建型模式(二):抽象工厂模式

    前面介绍的 工厂方法模式 中考虑的是一类产品的生产 如畜牧场只养动物 电视机厂只生产电视机 计算机软件学院只培养计算机软件专业的学生等 同种类称为同等级 也就是说 工厂方法模式 只考虑生产同等级的产品 但是在现实生活中许多工厂是综合型的工厂
  • [助兴篇]失业的程序员第八章-白话版

    http www shenyisyn org 2013 04 17 sycxy8 2 htm 博主昨天更新了 the jobless programmer 第八章 结果正评和负评参半 博主昨天在外地向我求助 希望我整个观后感 看在博主这么萌
  • golang的hijack篡取劫持

    一直不太明白golang的hijack是干什么的 只知道hijack这个词是篡取的意思 难道跟网关的作用一样 把client的请求发到这个服务上 然后这个服务帮忙转发到远端server 但是看了源码后就明白这个golang hijack是干
  • Matplotlib绘图的基本操作

    Matplotlib绘图
  • webpack和脚手架

    webpack和脚手架 前端工程化 什么是 前端工程化 什么是模块化 现阶段的模块化方案 模块化规范 浏览器端模块化规范 服务器端模块化规范 ES6 模块化 ES6的入门文件 服务端使用ES6模块化 按需导出与按需导入 直接执行模块代码 e
  • Web开发常见安全问题及解决

    Web攻击动机 恶作剧 关闭Web站点 拒绝正常服务 篡改Web网页 损害企业名誉 免费浏览收费内容 盗窃用户隐私信息 例如Email 以用户身份登录执行非法操作 从而获取暴利 以此为跳板攻击企业内网其他系统 网页挂木马 攻击访问网页的特定