分享三种常见的安全漏洞

输入输出验证不充分

SQL注入

定义

SQL注入是SQL语句插入到传入参数的攻击,之后再将这些参数传递给SQL服务器加以解析并执行。

成因

代码中有拼接的SQL或HQL语句

危害
  • 拖库:导致数据丢失、数据窃取、数据破坏或拒绝服务
  • 提权:完全接管操作系统
防范

思路:预处理和参数化查询

  • 预处理和参数化查询PreparedStatement

使用相关的框架如Struts、Hibernate、Ibatis等

  • 执行严格的输入验证

使用正规表达式,严格检查输入的类型、长度和内容

跨站脚本攻击(XSS)

定义

跨站脚本攻击(XSS)通常是指攻击者利用网站程序对传入参数值过滤不足,输入可以显示在页面上对其他用户造成影响的HTML、JS恶意代码。

成因
  • 传入值验证不严格、用户能够控制传入值
  • 未经处理直接输出到客户端网页中
危害

劫持用户会话、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器等。

防范

思路:数据在输出时转义编码处理

  • 输出编码(输出至客户端前进行编码)

输入验证或过滤(客户端及服务器端双向验证)

  • 严格输入验证:对用户输入的数据类型、大小、范围的验证,可避免输入危害的字符和冗余数据
  • 黑名单过滤

恶意文件上传

定义

恶意文件上传是指攻击者通过修改上传功能程序的参数内容,从而达到上传恶意文件的目的

成因

未对上传文件类型和格式做合法性校验,导致攻击者可以上传WebShell恶意文件(.asp,.war,.php,.jsp等)

危害

可以获取Web服务器的控制权

防范

思路:上传文件进行白名单过滤(只允许需要的)

  • 文件类型、大小检查
  • 下载时直接文件名引用

上传的文件以二进制形式下载,不提供直接访问

  • 上传目录禁止执行及独立保存位置

指定上传文件目录(此路径应该在Web服务器限制为只读,禁止执行),文件存储到独立的文件服务器或数据库中。

  • 随机改写文件名和文件路径,使不可猜测

逻辑设计缺陷

业务逻辑漏洞

定义

业务逻辑漏洞是由于业务逻辑设计或流程设计不完整、不合理导致的业务相关的缺陷。

成因

业务逻辑漏洞是由于业务逻辑设计或流程设计不完整、不合理,客户端可以控制输入数据和流程、检查点

危害
  • 信息泄露、越权访问、账号窃取等
  • 一般是全局问题,可能比常规的安全漏洞更加严重
实例
  1. 资源耗尽

短信、邮件等如果没有限制发送次数就会产生拒绝服务攻击

  1. 注册送优惠券

手机用户注册可送优惠券,未限制每个手机次数

  1. 任意重置密码

密码找回的凭证太弱,如只需填入一个四位或者六位的纯数字就可以重置密码,导致可以暴力破解;

用户找回密码的邮箱或者手机号码被修改

  1. 绕过验证码

12306输入完验证码提交订单时必须要等待4.8秒,可绕过验证码

  1. 任意邮箱绑定

任意邮箱绑定账号(结合CSRF),验证码链接直接登陆。

防范

思路:业务流程需要有必要的控制参数,同时避免控制参数被绕过。

  • 防止绕过流程节点和检查参考(如token等)
  • 不需要用户操作或访问的数据避免发送到客户端(如验证码发送给客户端)
  • 验证所有输入(数字的边界、正负值等)
  • 防范资源消耗攻击(如短信等)、拒绝服务攻击(大规模数据查询,如搜索通配符)等

失效的身份认证

定义

身份认证功能存在设计缺陷或功能薄弱,这就导致攻击者绕过认证,窃取密码、密钥、会话令牌或利用实施漏洞冒充其他用户身份

成因

身份认证方式薄弱,如弱密码、无验证码等

逻辑设计缺陷导致可以重置任意用户密码

危害

绕过认证或窃取用户账户,特权账户会造成更大的破坏

防范

身份认证时第一道安全防线,身份认证需要防暴力破解、弱口令攻击。密码策略和验证码时互联网系统认证标配。

  • 密码策略

一般系统:8字符以上,且进行弱密码检查,并禁止包含用户名

重要系统:使用多种验证方式(如动态密码、短信等)

  • 首次登陆修改初始密码:首次登陆强制修改默认初始密码
  • 防密码暴力破解或猜解(或撞库):使用验证码登陆(如三次密码或账号尝试错误后出现)
  • 密码重置:验证旧密码或手机验证码
  • 邮箱/手机绑定:绑定操作需要用户确认(需要手工输入验证码)

越权操作

定义

越权操作指对系统进行超越自己权限的操作;

横向越权:非法获取同类用户权限

纵向越权:非法获取管理员或特权用户权限

成因

缺乏对用户权限的判断,及隐藏URL失效

危害

越权可造成非授权用户对所有数据、功能进行操作

防范

思路:用户全部请求进行权限检查

  • 验证每次请求(URL、数据资源)的用户权限
  • 参数随机化(避免可预测)
  • 管理后台加强认证和访问控制(如IP地址限制)

环境漏洞

)]

第三方代码或组件

在使用第三方产品前,需要进行安全评估和版本筛选,从可信的网站(如官网下载),删除不必要的功能,并及时跟踪安全补丁。

API接口安全

接口安全认证

应对接口访问进行认证(服务器端分配API KEY),如使用Token/openid防范非法访问;IP白名单限制。

接口数据有效性检查

应对接口数据有效性进行检查,防范重放攻击和代码注入攻击。

接口数据加密传输

应使用数据加密、数字签名等方式保证数据保密性和完整性

接口访问权限及记录

应对接口的访问权限、访问频次进行控制,并记录接口访问的日志。

安全开发原则

永不信任用户输入

  1. 对用户输入的有效性检查
  2. 前端+后端双向验证
  3. 避免执行用户输入数据

最小攻击页面

  1. 最小权限
  2. 功能最小化(只实现需要功能)
  3. 输出最小化

纵深防御

  1. Web应用安全
  2. 操作安全
  3. 中间件安全
  4. 数据库安全
  5. 网络安全
  6. 客户端、移动APP安全

转载于:https://juejin.im/post/5d0c9211f265da1b8466ed64

常见Web安全漏洞及防范相关推荐

  1. 常见Web安全漏洞深入解析

    常见Web安全漏洞深入解析 1.XSS跨站脚本攻击 2.SQL注入攻击 3.OS命令注入攻击 4.HTTP首部注入攻击 5.邮件首部注入攻击 6.目录遍历攻击 7.远程文件包含漏洞 1.XSS跨站脚本 ...

  2. 美国主机常见的安全漏洞与防范方法详解

    在今天的数字时代,保护计算机系统和数据安全至关重要.不幸的是,网络安全问题在过去几年中已经成为全球性的问题.攻击者利用各种漏洞和技巧来入侵系统,以窃取敏感信息.加密数据或者破坏系统.在本文中,我们将探 ...

  3. 常见Web安全漏洞类型

    阅读文本大概需要3分钟. 为了对Web安全有个整体的认识,整理一下常见的Web安全漏洞类型,主要参考于OWASP组织历年来所研究发布的项目文档. 01:注入漏洞 1)SQL注入(SQL Injecti ...

  4. 常见web安全漏洞介绍

    引言 介绍常见web漏洞,参考OWASP top10漏洞,pikachu靶场 1.弱口令漏洞 1.1 原理介绍 只要口令能被猜测到或者出现在弱口令字典中,都算做弱口令. 1.2漏洞识别 如果是web登 ...

  5. 常见web安全漏洞及修复建议

    文章目录 常见WEB漏洞 高危漏洞 SQL Injection(SQL注入攻击) 漏洞描述 修复建议 Cross-site scripting(跨站脚本攻击,简称XSS) 漏洞描述 修复建议 Brok ...

  6. web 安全漏洞及防范

    一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...

  7. 常见web安全漏洞修复方案(全面)

    第一章 SQL注入漏洞 第一节 漏洞介绍 概述:SQL注入攻击包括通过输入数据从客户端插入或"注入"SQL查询到应用程序.一个成功的SQL注入攻击可以从 数据库中获取敏感数据.修改 ...

  8. 常见前端安全漏洞及防范方法

    参考文章: 8大前端安全问题(上) https://insights.thoughtworks.cn/eight-security-problems-in-front-end/ 8大前端安全问题(下) ...

  9. 常见Web安全漏洞测试指南

    任意文件下载 漏洞描述 一些网站由于业务需求,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意的文件,可以是源代码文件.敏感文件等. 测试指南 使用 B ...

  10. 常见Web安全漏洞--------sql注入

    SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库执行一些恶意的操作. 在mybatis 中比较容易出现:${} 会发生sql 注入问题 #{}: 解析为一个 JDBC 预编译语句( ...

最新文章

  1. 【多标签文本分类】Ensemble Application of Convolutional and Recurrent Neural Networks for Multi-label Text
  2. Python中bytes和str区别详细介绍
  3. 小小的 Python 编程故事
  4. java数组查找算法_JAVA数组中查找算法中equals和==的问题
  5. node.js安装以及git 的使用说明
  6. Consistent hashing
  7. java基础入门(一)
  8. querydsl动态 sql_JPA整合Querydsl入门篇
  9. 基于SSM的小区物业管理系统(附源码+论文)
  10. filezilla server mysql_使用FileZilla Server轻松搭建个人FTP服务器
  11. java redis令牌桶_Redis令牌桶算法在限速中的应用
  12. 简单工厂模式(Simple Factory Pattern)【1/23】
  13. 恢复U盘分区:windows自带工具diskpart
  14. 重签名ipa步骤及工具
  15. win10计算机入门使用教程,win10系统使用教程_windows10基本使用教程图文步骤
  16. 利用flex布局实现六个骰子
  17. 前后端交互学习笔记(二):Node.js及npm学习
  18. 1937 年阿尔法罗密欧 8C 2900B Berlinetta获选成为全球最负盛名的车辆
  19. notifyDataSetInvalidated()和notifyDataSetChanged()的区别
  20. 友盟的Common的包下载失败,报错Forbidden

热门文章

  1. jmeter校验结果_JMeter(1)--请求内容验证
  2. 【备忘】二叉树遍历的迭代实现
  3. 评分卡模型开发(九)--上线监测
  4. flume流程之SpoolDir-memory-hdfs
  5. Spring多个版本源码地址分享
  6. 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
  7. 如何使用JMeter来实现更大批量的并发的解决方案(即如何设置controller和Agent)
  8. 自适应网页设计(Responsive Web Design)(转)
  9. Symantec 不用密码卸载
  10. centos 6.2   为mysql5.6.10安装 HandlerSocket插件