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安全性编程的一些看法,终于还是得看个人,说的再多。假设不去做的话,还是没用,还是希望可以有很多其它的程序猿一起增加到安全性编程的队伍中去,提高自己的编码水平。

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4816569.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 本书共分9章,主要内容如下: # 第一章 # 解决的主要问题 # 运行本书的程序需要哪些软件? # 主要内容 # 介绍本书所使用的主要软件及其安装和配置 # 第二章 # 解决的主要问题——内容的安全性 # 数据在网上传递怎么样防止被黑客窃取听到? # 硬盘上的文件中有敏感数据,如何防止被黑客看到? # 主要内容 # 本章解决的是数据内容的安全性,介绍Java的加密和解密技术。学完该章可以通过Java编程对各种数据进行各种形式的加密。密码学也是安全机制的基础。 # 第三章 # 解决的主要问题——和源代码相关的安全性 # 编写好的程序给用户后,用户如果能反编译出源代码怎么办? # 定义类、成员变量、方法时如何防止恶意或无意的攻击? # 主要内容 # 本章解决的是和源代码相关的保护。包括源代码、类、成员变量、方法的保护。通过常用的反编译工具加强对源代码保护的认识,使用混淆器和加密等方式对源代码作了初步保护。同时演示了编写程序时如何考虑攻击者对类、成员变量、方法等方面的攻击。 # 第四章 # 解决的主要问题——确定数据的完整性和所有者 # 网上下载了一个程序,如何确定它确实是某某公司开发的? # 如何确定黑客没有将程序修改过? # 某公司或人发来一个文件,后来他不承认发过这个文件怎么办? # 主要内容 # 第四章起开始介绍和身份认证相关的技术。包括身份确定性、不可篡改性、不可否认性等,该章介绍的消息摘要和签名技术可解决这些问题。 # 第五章、第六章 # 解决的主要问题——数字化身份的凭证 # 实际应用中如何方便地使用摘要和签名技术? # 如何确定某个签名确实是某个人或机构的? # 主要内容 # 第五章和第六章介绍基于摘要和签名技术的数字证书。这是Java安全中确定身份的主要技术。其中第五章介绍了数字证书的创建、签发、验证和维护等,第六章介绍了多个证书组成的证书链(CertPath)的创建和验证。 # 第七章 # 解决的主要问题——数据安全传输,服务器和用户身份的确定 # 客户机和服务器之间的通信如何自动进行加密传输? # 客户机和服务器之间的通信如何相互确定身份? # 浏览器访问一个站点,如何确定这个站点不是黑客的服务器? # 主要内容 # 本章介绍介绍使用加密技术和证书机制的一个实际应用,基于SSL和HTTPS的编程。学完本章可以编写自己的SSL和HTTPS客户及服务器程序。 # 第八章 # 解决的主要问题——基于代码来源的程序的安全运行 # 网上下载了一个程序,运行时会不会删除我的文件,或将某些文件泄漏给黑客? # 编写了一个Java Applet,如何让其能访问硬盘上的文件? # 主要内容 # 本章介绍基于代码来源的程序的安全运行,可以基于运行时代码在哪个URL、或代码是谁签名的限制其可以访问哪些用户资源。还介绍了定义自己的权限以及签名Java Applet。 # 第九章 # 解决的主要问题——身份验证和基于执行者身份的程序的安全运行 # 程序需要用户输入账号和口令到数据库登录,但以后可能需要改为智能卡验证。 # 程序需要访问某个用户资源,但只有用户以某些特殊身份登录时才需要该权限。 # 主要内容 # 本章介绍Java验证和授权服务(JAAS),可以方便地更换验证模块,并实现基于身份的授权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值