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地址可以 ...
随机推荐
- Thinkphp编辑器扩展类kindeditor用法
一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...
- Nutch 二次开发parse纸
大约nutch基础知识可以参考lemo柱 nutch支持二次开发,为了满足搜索的准确性的问题,内容提取出来作为索引的内容,相应的是parse_text的数据.我使用的事nutch1.4 版本号,在cy ...
- 【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见
内容简介 1.第一部分第五课:Unity桌面,人生若只如初见 2.第一部分第六课预告:Linux如何安装在虚拟机中 Unity桌面,人生若只如初见 不容易啊,经过了前几课的学习,我们认识了Linux是 ...
- Web静态和动态项目委托代理基于面向方面编程AOP
本来每天更新,我一般喜欢晚上十二点的时候发文章,结果是不是愚人节?校内网也将是非常有趣,破,把我给打. ..好吧-从今天开始的话题AOP.AOP太重要了,所以把第二篇文章谈论这个话题,AOP它是Spr ...
- PHP PDO sqlite ,Unable to Open database file的解决方法
t.php在网站的根目录. fdy.db在inc文件夹下; t.php中sqlite路径写成相对路径 $db = new PDO('sqlite:inc/fdy.db'); 开始提示 Fatal er ...
- 第十七章——配置SQLServer(3)——配置“对即时负载的优化”
原文:第十七章--配置SQLServer(3)--配置"对即时负载的优化" 前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中.在很多 ...
- java.lang.VerifyError
public class VerifyErrorextends LinkageError Thrown when the "verifier" detects that a cla ...
- 【转】Android HTTP协议
前言 说到HTTP协议,那必须要说说WWW了,WWW是环球信息网(World Wide Web )的缩写,也可以简称为Web,中文名字为“万维网”.简单来说,WWW是以Internet作为传输媒介的一 ...
- Html 5 坦克大战(韩顺平县版本号)
html 5例如,下面的代码段: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/ ...
- Unity GUI选择与评价
因为Unity内建的GUI不管是不是从开发效率或效率强制,因此,许多派生GUI插入,什么插件的选择,是一个非常值它被认为是. 既然是评价,就会有非常多的主观意识,这不一定成为选择的根据. 再比方.我已 ...