java安全编程
java安全程序实际上是一个点稍微防御性编程意味着内,竟java作为编程语言,较C,c++,本身被认为是比较安全的,随着C,C++这样的偏底层的编程语言比,java少了显示的指针调用。少了程序上的内存释放。回收。这些统统都交给了JVM。并且在内存分配的也做了一些检測,诸如越界检測ArrayIndexOutOf。还有空指针保存NullPointerException,这一切的不同使得java的使用也变得相对简单很多,在语言自身上避免了非常多不安全的可能出现。可是虽然java在编程上是安全的,可是这并不意味着程序猿们能够任意的写代码了。
之前某组织的一份报告表明,在近期的近千个漏洞中,有64%的漏洞都是因为编写的程序引起的。程序猿如果对自己的编程习惯不够重视的。必定会为此付出代价。
本篇文章我想聊聊的是在安全方面,可能会出现的几个安全漏洞,在这里我说的很多其它的是针对的java平台的语言,但我相信相同适用于不论什么一种其它语言,安全性问题都是普通存在。相同的嘛。
1.错位的信任。一个软件系统能够分为多个子系统,每一个子系统有各自的訪问模块,能够这么说每一个子模块都有自己的受信域,可是他们自身是不能给自己赋予自己受信级别的,应该是由程序的部署者来确定,所以在这里我们说。划分好每一个模块的受信域,而且保证保证每一个子模块在自己的模块活动。一个好的安全设计模式事实上应该是非信任解耦以及权限分离的结合。
2.注入攻击,这个太常见了,平时说的最多的恐怕就是sql注入攻击了。当组件或系统在接受外部数据源的时候,有些数据能够是恶意的数据。假设此时不加以验证处理。就会导入注入攻击。这里我们倡导的做法是(1)验证。比方说各种数值的验证,是否在给定的要求范围内(2).净化,这指的是避免敏感数据的暴露。能够通过删除特殊字符,或进行转码的形式。
(3).最后是标准化和归一化。将输入的形式转化为最简单的形式。这事实上是一种有损装换的过程。
经历了以上过程。不要以为就能够万事无忧了。当接受到复杂的指令字符串时,当在这些字符串中存在的一个特殊字符,比方"delete
, insert"等会触发动作的关键词,也必须进行处理。否则,还是会出现安全漏洞。以下是一些对此状况的解决方式:
(1).操作系统的命令解释器
(2).详细SQL兼容接口的数据库
(3).XML解释器
(4).XPath评估器
(5).基于轻量级的文件夹訪问协议的文件夹服务,俗称LDAP
(6).脚本引擎
(7).正則表達式(regex)编译器
有些我们听过。
有些,确实我也没有听过。
3.敏感数据泄露。敏感数据指的范围非常广,我们常说的用户信息,当然就是敏感数据了,还有号码。银行账号。更别说更加机密的各种密钥了。所以在传输数据的过程中,我们一般降低对敏感数据的传输,可是真的须要此数据交互的时候,也要对这些数据进行过滤处理,在传送给非信任的组件。来张演示图:
在java里是怎样做出这样操作呢,在java中。我们是通过类。接口,成员实现訪问控制的。
类和类成员给予尽可能低的訪问权限。
接口也尽量开放之同意公开訪问的方法。
4.效能泄露。首先解释一下什么叫效能,效能指的是在授权中能够进行沟通而不会忘记的标识。每一个java对象都有不会被遗忘的标识。所以我们自然能够联系到这些对象的引用事实上就是就是这些对象的标示,也就是效能。对于那些会运行敏感操作的对象的引用来说。他们仅仅同意他们的持有者运行这些操作的效能,就是对象引用,所以引用自身必须保证效能不能泄露给非受信代码。
5.拒绝服务。
俗称dos攻击。
如今还有了ddos,分布式拒绝攻击了。拒绝攻击的原因非常easy,就是有些恶意程序霸占着系统不放,导致正常的程序得不到资源,终于导致系统瘫痪。资源就被无故耗尽。
在<<java安全编码规范>>一书中提到了一些dos攻击的样例:
(1).请求一个大的矢量图片,如SVG文件或字体文件
(2)."ZIP"炸弹,那些经过zip,gzip压缩过的HTML文件,会由于解压而消耗巨大的资源
(3).“XML解析炸弹”。解析XML文档的时候。假设结点非常多,将会迅速号费非常多的内存空间
(4).过度使用磁盘空间
(5).在一个散列表中插入了多个密钥。而这些密钥的使用同样的散列码,这样会导致最差的性能O(n*n),而不是平均性能O(n)
(6).发起很多连接,server为每一个连接分配大量的资源比如泛洪攻击。
6.最低权限原则。
这点在上面提到一些方法里都或多或少的已经有所体现。java灵活的安全模型赋予应用很多其它的权限,这能够通过自己定义安全策略来完毕。特权操作应该仅仅提供给那些最少的须要特权的代码。java的AccessController机制同意仅仅有须要的代码能够获得权限的提升。当一个类须要改变他的权限时。能够调用AccessController的doPriviliged()方法,获得暂时的特权,可是还是尽可能的少出现doPriviliged()方法,从而避免出现安全漏洞。
7.安全管理器。这里说的安全管理器。指的是java中的SecurityManager。在使用java API的时候,当出现运行违反安全策略的操作时,系统都会报出SecurityException的错误。
我们在使用java编敲代码的时候,使用的是系统默认的SecurityManager,当是当我们队安全的要求比較高的时候。我们鼓舞很多其它的去实现一个自己定义的安全管理器,在代码中常常想到会使用AcsessController,帮助我们去限制或获取一些特权的代码。
以上就是我对于java安全性编程的一些看法,终于还是得看个人,说的再多。假设不去做的话,还是没用,还是希望可以有很多其它的程序猿一起增加到安全性编程的队伍中去,提高自己的编码水平。
版权声明:本文博主原创文章,博客,未经同意不得转载。
java安全编程的更多相关文章
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- 【Java并发编程实战】----- AQS(四):CLH同步队列
在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形.其主要从两方面进行了改造:节点的结构与节点等待机制.在结构上引入了头 ...
- 【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport
在上篇博客([Java并发编程实战]----- AQS(二):获取锁.释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起:在释放锁后,需要唤醒该线程的继任节点 ...
- 【Java并发编程实战】----- AQS(二):获取锁、释放锁
上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放. AQS锁获取 AQS包含如下几个方法: acquire(int arg):以独占模式获取对象,忽略中断. acquireInte ...
- 【Java并发编程实战】-----“J.U.C”:CLH队列锁
在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格按照FIFO的队列.他能够确保无饥饿,严格的先来先服务的公平性.下图是CLH队列节点的示意图: 在CLH队列的节点QN ...
- 【Java并发编程实战】-----“J.U.C”:CountDownlatch
上篇博文([Java并发编程实战]-----"J.U.C":CyclicBarrier)LZ介绍了CyclicBarrier.CyclicBarrier所描述的是"允许一 ...
- 【Java并发编程实战】-----“J.U.C”:CyclicBarrier
在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...
- 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock
ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁.ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量.在这种情况下任何的"读/ ...
- Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...
- java socket编程(li)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...
随机推荐
- JAVA jdbc(数据库连接池)学习笔记(转)
学习内容: 1.JDBC的含义... JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些 ...
- VMWare网络设置的3中方式(转)
一 VMware网络设置的三种方式 1 Host-only连接方式 让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址 ...
- Autodesk FBX SDK Program 中文 (二)
这是Autodesk FBX SDK学习笔记第二篇.下面部分汉字翻译自Autodesk FBX SDK Program.翻译人:有道翻译. 上一篇讲了一些FBX SDK的基本操作.创建FbxManag ...
- 制作简易计算器处理过程Servlet
CalculationServlet.java: package com.you.servlet; import java.io.IOException; import java.io.PrintWr ...
- 如何插上U盘 自动复制内容
U盘插入自动复制,有效对付那些不肯给PPT的老师,还有一定几率拿到期末考试卷子···有图有真相!业界良心的好东西!!现在看还来得及!!! 代码优化了一下,把不是很重要的都删掉了,这次使用时看不出任何现 ...
- 【android】优秀的UI资源站点集合
1.http://ionicons.com/ 这个站点的图标能满足大部分人的需求.里面包括了经常使用的android风格的图标 ios7风格的图标 以及一些社会化分享图标,总共500个左右.githu ...
- C# winForm里窗体嵌套
ShowAllPage sAllPage = new ShowAllPage(); sAllPage.FormBorderStyle = FormBorderStyle.None ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- SQL server 提示“代理XP”被关闭的解决方法
打开SQL Server Configuration Manager(SQL Server配置管理器),启用SQL Server Agent(SQL Server 代理).
- [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略
原文:[原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 .NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从D ...