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开发常见安全问题及解决 的相关文章

  • MYSQL HTTP头部注入

    HTTP头部基础 Accept 浏览器能够处理的内容类型 Accept Charset 浏览器能够显示的字符集 Accept Encoding 浏览器能处理的压缩编码 Accept Language 浏览器当前设置的语言 Connectio
  • 渗透测试——万能密码与POST注入

    1 万能密码的原理 数据库没有对前端输入的参数的合法性做过率 并且账号和密码 一起输入 可以通过编写恶意语句 将用户与密码的输入结果判断为真 就实现了万能密码的登录 2 万能密码实例 查询语句select from KaTeX parse
  • SQLi-LABS(21~25a关详解)

    SQLi LABS Less 21 查看题目环境 登陆给我回显的数据是I LOVE YOU COOKIES 这题看了网上的wp才知道原来是将我们的uname和passwd都进行base64编码 表示不知道怎么看出来的 Cookie unam
  • 互联网安全架构

    web安全架构 上 开始之前这们说一下 web网站其实防御也相当重要 不管是服务器防御 后台数据防御 数据库防御都是必须滴 那我们说说常见的几种 后续再给大家分享 api接口安全性设计 黑名单白名单 以及防御DDOS XSS攻击 SQL注入
  • 【文件上传绕过】八、::$DATA上传绕过

    文章目录 一 利用Windows特性 二 源码 三 使用burpsuite抓包在文件后缀加 DATA绕过 一 利用Windows特性 在window的时候如果文件名 DATA 会把 DATA之后的数据当成文件流处理 不会检测后缀名 且保持
  • SQL中的and、or

    在sql查询语句中长用到and和or 它们在用的时候有些需要注意的地方 不管在一项表达式中有多少个and或or 它是将前一个表达式看作一项 and与or后的所有表达式看做一项 and的前后都为真的时候才为真 取交集 or有一个为真 即为真
  • SQLi-Labs 学习笔记(Less 41-50)

    点击打开链接 Less 41 基于错误的POST型单引号字符型注入 先打开网页查看 Welcome Dhakkan 与之前讲的Less 40的区别 plain view plain copy sql SELECT FROM users WH
  • MySQL的基础部分(基础部分完结)

    MySQL的基础部分 基础部分完结 文章目录 MySQL的基础部分 基础部分完结 知识小回顾 小案例部分 分页查询 总结多子句查询 多表查询 重点 难点 自连接 多行子查询 小结 子查询临时表 any all关键字的使用 mysql多列子查
  • Hudi 基础入门篇

    Hudi 诞生 Apache Hudi由Uber开发并开源 该项目在2016年开始开发 并于2017年开源 2019年1月进入 Apache 孵化器 且2020年6月称为Apache 顶级项目 目前最新版本 0 9 0版本 Hudi 一开始
  • 【开发】前端工程——ReactJS

    前置知识 JavaScript ES6 ReactJS 前端开发的四个阶段 1 静态页面阶段 在第一个阶段中前端页面都是静态的 所有前端代码和前端数据都是后端生成的 前端纯粹只是增加一些特殊效果 后端MVC模式 Model 模型层 提供 保
  • IDEA使用教程最全汇总(持续更新)

    1 IDEA实用设置小技巧 2 IDEA常用快捷键 3 IDEA关联数据库 前言 本文记录IDEA实用的使用教程 以作记录 一 IDEA实用设置小技巧 1 IDEA去掉代码黄色下划线 在IDEA中根据设置的不同 有些代码页 当代码重复比较多
  • jsvc

    boltapp localhost apphome home boltapp apphome jsvc help Usage jsvc options class args Where options include help help s
  • QT多进程

    QT多进程 sf2gis 163 com 2014年11月6日 1 目的 启动可执行文件 2 原理 启动进程 并模拟命令行进行交互 3 方法 QProcess std system 3 1 QProcess 1 启动程序 可以使用start
  • Httpservletrequest与Httpservletresponse

    目录 一 Httpservletrequest 1 1什么是Httpservletrequest 1 2Httpservletrequest中的方法 二 Httpservletresponse 1 1什么是Httpservletrespon
  • 支付宝、微信、银联三种支付平台链接

    1 申请支付宝需要的资料 支付宝移动开发平台 1 单位营业执照彩色扫描件或数码照片 2 组织机构代码证彩色扫描件或数码照片 3 对公银行账户 基本账户 一般账户均可 4 法定代表人的身份证彩色扫描件或数码照片 若为代理人 即法人以外的公司代
  • sql注入_字符型、数字型判断

    如何判断sql注入是字符型还是数字型 在进行sql注入时 字段类型分为字符型或者数字型 意味着我们需要构造不同的sql语句 假设存在sql注入的url是 http 192 168 0 1 id 1 数字型判定 1 and或者or 假设数据库
  • 从Java到区块链:如何成为区块链开发人员

    最近这些天 区块链是每个开发人员的谈资 来自各个领域的许多软件开发商现在正试图进入区块链市场 我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出区块链开发方面的第一步的 希望对大家有所帮助 JAX
  • C#短信接口开发经验及具体开发实现

    一 配置文件app config
  • Python - 字典3

    修改字典项 您可以通过引用其键名来更改特定项的值 示例 将 year 更改为 2018 thisdict brand Ford model Mustang year 1964 thisdict year 2018 更新字典 update 方
  • C 语言运算符详解

    C 语言中的运算符 运算符用于对变量和值进行操作 在下面的示例中 我们使用 运算符将两个值相加 int myNum 100 50 虽然 运算符通常用于将两个值相加 就像上面的示例一样 它还可以用于将变量和值相加 或者将变量和另一个变量相加

随机推荐

  • 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 以用户身份登录执行非法操作 从而获取暴利 以此为跳板攻击企业内网其他系统 网页挂木马 攻击访问网页的特定