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地址可以 ...
随机推荐
- iOS 8 新特性
这篇文章会介绍iOS8开发相关的主要特性. App 插件 通过支持插件,iOS8让我们可以系统指定的区域进行扩展,也就是为用户的特定需求提供自定义的方法.例如:可以通过App插件帮助用户分享他们的内容 ...
- 创建Material Design风格Android应用--自定义阴影和裁剪视图
之前已经写过通过应用主题和使用ListView, CardView,应用Material Design样式,同一时候都都能够通过support library向下兼容.今天要写的阴影和视图裁剪.无法向 ...
- 编译命令行终端 swift
So, this is where swift lives, after you've installed XCode 6 Beta: /Applications/Xcode6-Beta.app/Co ...
- AND信号灯和信号灯集-----同步和互斥解决面向对象(两)
AND信号 互斥的上述处理,它是针对仅在进程之间共享的一个关键资源方面.在一些应用.这是一个过程,需要在为了自己的使命后,获得两个或多个其他共享资源运行. 个进程A和B.他们都要求訪问共享数据D和E. ...
- 《Linux Device Drivers》第十六章 块设备驱动程序——note
基本介绍 块设备驱动程序通过主传动固定大小数据的随机访问设备 Linux核心Visual块设备作为基本设备和不同的字符设备类型 Linux块设备驱动程序接口,使块设备最大限度地发挥其效用.一个问题 一 ...
- 同ListView该接口无法通过手势滑动左右切换界面问题解决方法
同ListView该接口无法通过手势滑动左右切换界面问题解决方法 问题描写叙述: 在做OnGestureListener滑动切换窗体的时候,会遇到这种问题.就是当界面中含有ListView的时候.On ...
- 【Android进阶】SlidingMenu实现侧滑栏效果的实现
public class MainActivity extends Activity { @Override protected void onCreate(final Bundle savedIns ...
- XCL-Charts绘画面积图(AreaChart) 例1
样本区域地图,发现区域图的时候把做向上注视位置图更具优势的管理.在改变. 区域图网格和轴是不一样的处理与其它图, 它是用来表示其影响范围的覆盖范围,车桥无段伸出. 在这里下处理. watermark/ ...
- PHP获取表单方法
php接收HTML当表单提交的信息,数据将存储提交在全局阵列中,我们能够调用系统特定的自己主动全局变量数组来获取这些值.经常使用的自己主动全局变量例如以下所看到的: $_GET $_POST $_RE ...
- 小谷的战斗Jquery(三)--水平和垂直菜单
日薪的例子似乎有点低,今天做多.行,这种实现是一个简单的菜单,Web项目中,有两个共同的菜单:纵向和横向.说到从垂直,看原代码. html代码实现最主要的菜单与子菜单 <span style=& ...