Race Condition: Singleton Member Field 竞争条件:单例的成员字段 Abstract Servlet 成员字段可能允许一个用户查看其他用户的数据. Explanation 许多 Servlet 开发人员都不了解 Servlet 为单例模式. Servlet 只有一个实例,并通过使用和重复使用该单个实例来处理需要由不同线程同时处理的多个请求. 这种误解的共同后果是,开发者使用 Servlet 成员字段的这种方式会导致某个用户可能在无意中看到其他用户的数据. 换言…
Password Management: Password in Configuration File(明文存储密码) https://www.cnblogs.com/mahongbiao/p/12496042.html Command Injection(命令注入) https://www.cnblogs.com/mahongbiao/p/12494308.html Unreleased Resource: Database 未释放资源:数据库 https://www.cnblogs.com/…
Abstract 如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录. Explanation Database access control 错误在以下情况下发生: 数据从一个不可信赖的数据源进入程序. 这个数据用来指定 SQL 查询中主键的值. 例 1: 以下代码用到一个参数化指令,这个指令转义了元字符,以防止SQL injection 漏洞,并构建和执行一个 SQL 查询.该 SQL 查询指令可以搜索与指定标识符 […
Cross-Site Scripting: Persistent Abstract 向 Web 浏览器发送非法数据会导致浏览器执行恶意代码. Explanation Cross-Site Scripting (XSS) 漏洞在以下情况下发生: 数据通过一个不可信赖的数据源进入 Web 应用程序. 对于 Persistent(也称为 Stored) XSS,不可信赖的源通常为数据库或其他后端数据存储,而对于Reflected XSS,该源通常为 Web 请求. 2. 在未检验包含数据的动态内容是否…
Header Manipulation Abstract HTTP 响应头文件中包含未验证的数据会引发 cache-poisoning. cross-site scripting. cross-user defacement. page hijacking. cookie manipulation 或 open redirect. Explanation 以下情况中会出现 Header Manipulation 漏洞: 数据通过一个不可信赖的数据源进入 Web 应用程序,最常见的是 HTTP 请…
SQL Injection SQL注入 Abstract 通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令. Explanation SQL injection 错误在以下情况下发生: 数据从一个不可信赖的数据源进入程序. 数据用于动态地构造一个 SQL 查询. 例1: 以下代码动态地构造并执行了一个SQL查询,该查询可以搜索与指定名称相匹配的项. 该查询仅会显示条目所有者与被授予权限的当前用户一致的条目. ... String userName…
File Disclosure: Spring 文件泄露(Spring框架) Abstract 若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件) 或者查看受保护的目录下的任意文件. Explanation 在以下情况下,会发生文件泄露: 数据从一个不可信赖的数据源进入程序. 数据用于动态地构造一个路径. 例 1: 下面的代码会接受不可信赖的数据,并使用其构造服务器端转发所使用的路径. ... String returnURL = requ…
Password Management: Password in Configuration File(明文存储密码) Abstract 在配置文件中存储明文密码,可能会危及系统安全. Explanation 在配置文件中存储明文密码会使所有能够访问该文件的人都能访问那些用密码保护的资源. 程序员有时候认为, 他们不可能阻止应用程序被那些能够访问配置文件的攻击者入侵,但是这种想法会导致攻击者发动攻击变得更加容易. 健全的 password management 方针从来不会允许以明文形式存储密码…
Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Command Injection 漏洞主要表现为以下两种形式: - 攻击者能够篡改程序执行的命令: 攻击者直接控制了所执行的命令. - 攻击者能够篡改命令的执行环境: 攻击者间接地控制了所执行的命令. 在这种情况下,我们着重关注第一种情况,即攻击者控制所执行命令的可能性. 这种形式的 Command Inje…
Unreleased Resource: Database 未释放资源:数据库 Abstract 程序可能无法成功释放某一项系统资源. Explanation 程序可能无法成功释放某一项系统资源. 资源泄露至少有两种常见的原因: - 错误状况及其他异常情况. - 未明确程序的哪一部份负责释放资源. 大部分 Unreleased Resource 问题只会导致一般的软件可靠性问题, 但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻…
Path Manipulation Abstract 通过用户输入控制 file system 操作所用的路径,借此攻击者可以访问或修改其他受保护的系统资源. Explanation 当满足以下两个条件时,就会产生 path manipulation 错误: 1. 攻击者能够指定某一 file system 操作中所使用的路径. 2. 攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的. 例如, 在某一程序中,攻击者可以获得特定的权限,以重写指定的文件或是在其控制的配…
Dynamic Code Evaluation: Code Injection Abstract 在运行时中解析用户控制的指令,会让攻击者有机会执行恶意代码. Explanation 许多现代编程语言都允许动态解析源代码指令. 这使得程序员可以执行基于用户输入的动态指令. 当程序员错误地认为由用户直接提供的指令仅会执行一些无害的操作时(如对当前的用户对象进行简单的计算或修改用户的状态),就会出现 code injection 漏洞: 然而,若不经过适当的验证,用户指定的操作可能并不是程序员最初所…
Privacy Violation 隐私泄露 Abstract 对各种机密信息处理不当,如客户密码或社会保障号码,会危及到用户的个人隐私,这是一种非法行为. Explanation Privacy Violation 会在以下情况下发生: 用户私人信息进入了程序. 数据被写到了一个外部介质,例如控制台. file system 或网络. 例: 以下代码包含了一个日志指令,该日志指令通过在日志文件中储存记录信息的方式跟踪添加到数据库中的各条记录信息. 在储存的其他数值中, getPassword(…
Privacy Violation: Heap Inspection 隐私泄露(堆检查) Abstract 将敏感数据存储在 String 对象中使系统无法从内存中可靠地清除数据. Explanation 如果在使用敏感数据(例如密码.社会保障号码.信用卡号等)后不清除内存,则存储在内存中的这些数据可能会泄漏. 通常而言, String 是所用的存储敏感数据,然而,由于 String 对象不可改变,因此用户只能使用 JVM 垃圾收集器来从内存中清除 String 的值. 除非 JVM 内存不足,…
1.Person类 package com.yfs.javase; public class Person { String name;//每个对象上分配 与对象绑定 int age; char sex; boolean married; static String country = "中国";//静态属性 与类绑定 所有对象共享 public static void baseInfo () {//静态方法 与类绑定 所有对象共享 System.out.println("舌…
Abstract 所创建的 cookie 的 secure 标记没有设置为 true. Explanation 现今的 Web 浏览器支持每个 cookie 的 secure 标记. 如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie. 通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性. 如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要. 例 1: 在下面的示例中,在未设置 secure 标记的情况…
前言: 控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语.它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup).初探Spring,当看到这句话的时候,突发奇想其实IOC是不是就是一个单例模式的对象创建工具呢.Spring在创建之初会根据配置文件和代码中的注解,分析哪些Bean是需要创建的,于是将该类对象一一创建到缓存中,当接收到前端请求时,调…
[原创声明]此文为本人原创,欢迎转载,转载请注明出处,作者链接~ http://www.cnblogs.com/m-yb/p/8833085.html 单例很常用,面试也经常被问,如:不用自定义锁怎么实现线程安全的单例? 下面我将分别介绍饿汉.懒汉的单例(都是线程安全的): 饿汉单例: package com.dayuanit.utils.hungry; public class Singleton { private static final Singleton instance = new…
Spring中的Bean默认都是单例(singleton),Spring中Bean的scope属性有五种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype 表示每次获得bean都会生成以新的对象 request 表示在一次Htttp请求内有效(只适用于web应用) session 表示在一个用户会话内有效(只适用于web应用) globalSession 表示在全局会话内有效(只适用于web应用) SpringM…
单例/单体模式(Singleton) 首先,单例模式是对象的创建模式之一,此外还包括工厂模式. 单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大概是这个样子 class Singleton { //私有,静态的类自身实例 private static Singleton instance = new Singleton(); //私有的构造子(构造器,构造函数,构造方法) private Single…
  单例(Singleton)模式:   保证一个类在系统里只能有一个对象被实例化.   如:缓存池.数据库连接池.线程池.一些应用服务实例等.   难点:在多线程环境中,保证实例的唯一性.     最简单的单例模式: 保证该类构造方法是私有的,外部无法创建该类型的对象: 提供一个全局访问点,方便给客户对象提供对此单例对象的使用:   public class Singleton { /** * 私有变量,外界无法访问 * 可以定义 public 类型 instance变量,把属性直接暴露给客户…
单例 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例(eg:应对一些特殊情况,比如数据库连接池(内置了资源)  全局唯一号码生成器),才能确保它们的逻辑正确性.以及良好的效率. 优点:单例的好处就是单例,就是全局唯一的一个实例单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例 缺点:单例可以避免重复创建,但是也会常驻内存 除非是真的有必要,否则不要单例 使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例…
Race Condition(也叫做资源竞争),是多线程编程中比较头疼的问题.特别是Java多线程模型当中,经常会因为多个线程同时访问相同的共享数据,而造成数据的不一致性.为了解决这个问题,通常来说需要加上同步标志“synchronized”,来保证数据的串行访问.但是“synchronized”是个性能杀手,过多的使用会导致性能下降,特别是扩展性下降,使得你的系统不能使用多个CPU资源.  这是我们在性能测试中经常遇见的问题. 可是上个星期我却遇见了相反的情况:因为缺少同步标志也同样会使性能受…
写在前面 为方便读者,本文已添加至索引: 设计模式 魔法手札索引 在前几篇笔记中,我们有了解了部分对象创建型模式,包括Builder(建造者).Abstract Factory(抽象工厂)和Factory Method(工厂方法),今天我们要接触到的是另一种对象创建型模式,既简单又重要的:Singleton(单例)模式. 对一些类来说,只有一个实例是很重要的.比如说,一个软件系统中,应该只有一个窗口管理器:通信设备中,每张板卡上唯一的端口管理器:一个数字滤波器只能有一个A/D转换器.此外,这些唯…
在很多门课上都接触到race condition, 其中也举了很多方法解决这个问题.于是想来总结一下这些方法. Race condition 它旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺序或者出现时机.此词源自于两个信号试着彼此竞争,来影响谁先输出.  举例来说,如果计算机中的两个进程同时试图修改一个共享内存的内容,在没有并发控制的情况下,最后的结果依赖于两个进程的执行顺序与时机.而且如果发生了并发访问冲突,则最后的结果是不正确的.  竞争冒险常见于不良设计的电子系统,尤其是逻辑电…
今天开始学习设计模式,借此机会学习并整理学习笔记. 设计模式是一门不区分语言的课程,什么样的编程语言都可以用到设计模式.如果说java语法规则比作武功招式的话,那么设计模式就是心法. 设计模式共有23种,常见的19种,最常用的9-10种. 设计模式分三种类型:创建型.结构型.行为型: 其中创建型包含单例设计模式.工厂模式.抽象工厂模式.原型模式.建造者模式:结构型包含代理模式.装饰器模式.适配器模式.外观模式.组合模式.享元模式.桥梁模式:行为型包含:策略模式.责任链模式.命令模式.中介者模式.…
竞态条件 race condition Race condition - Wikipedia https://en.wikipedia.org/wiki/Race_condition A race condition or race hazard is the condition of an electronics, software, or other system where the system's substantive behavior is dependent on the sequ…
单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化自己 Java代码: class Recycle { static int[] arr; static String str; //自己内部声明自己 private static Recycle recycle ; //构造函数私有化 private Recycle(){ arr = new int…
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能…
为什么要使用singleton设计模式? 假设设计了一个操作数组的工具类(Tools),里面有一个锤子的方法(Hammer),如果不使用singleton设计模式,每次想调用Hammer方法都需要new一个Tools类出来 class Tools{ //锤子 public void Hammer(){ System.out.println("使用锤子"); } } public class ToolsDemo { public static void main(String[] arg…