Java安全开发规范

时间:2019-05-14 02:10:15下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Java安全开发规范》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Java安全开发规范》。

第一篇:Java安全开发规范

Java安全开发规范 第1章

前言

为提高应用安全水平,特制定本规范对代码编制进行规范。规范中的安全要求按照严格程度分为三级: > Policy 必须遵循的策略,实现方法可以自定义,但不能外翻策略的规定。> Discipline 必须遵守的纪律,必须按照规定中的描述实施,绝对不能违反。> Guideline 建议性的指南和规范,将逐步要求遵循实施。第2章 Java安全性开发规范 2.1 跨站脚本XSS * 风险及危害性:

跨站脚本XSS指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代 码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个 包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和 javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信 息。

如何导致XSS攻击,一般来说来自http的post,或者get方式取得参数值很可能为恶意代码,如果开发者直接用这些参数组合成http链接,用户点击该连接,就会造成XSS攻击风险。* 应对措施

开发者要保证代码的安全性,使其免受XSS攻击,可采取以下措施:

1. 过滤或转换用户提交数据中的HTML代码。

2. 限制用户提交数据的长度 * 非安全代码示例

<%

String mofWindowId = request.getParameter(“mofWindowId”);

%>

name=“importXml” action=“mofXml.cmd?method=importMofXml&primaryKey=<%=mofWindowId%>” method=“post”> * 安全代码示例

<%

String mofWindowId=XSSCheck.getParameter(request,“mofWindowId”);

%>

name=“importXml” action=“mofXml.cmd?method=importMofXml&primaryKey=<%=mofWindowId%>” method=“post”>

注:XSSCheck为公用工具类,用于XSS检查,其getParameter实现逻辑如下:

1、通过参数名称,从请求中取得参数值。

2、将&,<,>,',“转义: &-> &

<-> ⁢

>-> >

”-> “

'-> ´

3、返回安全的字符串。

2.2 违反信任边界规则(Trust Boundary Violation)

* 风险及危害

一个受信任的边界可以被认为是由系统划出的边境,例如session,attribute,aplication,数据库,文件等在服务端存储边界都认为是受信任的。反之来来自http的post,或者get方式取得参数值是不受信任的。凡是将非受信任边界的参数转入到受信任的边界内,需要对参数值进行检查,否则造成信任边界违例,当开发者直接操作受信边界内部的参数时会认为该参数是安全的,而造成安全隐患,例如脚本注入,XSS攻击等。* 应对措施

开发者要保证代码的安全性,当参数信任边界切换的时候,对参数值进行检查,检查其内容里是否用非法脚本信息:

1. 过滤或转换用户提交数据中的HTML代码。

2. 限制用户提交数据的长度 * 非安全代码示例

String dsn = request.getParameter(”DSN“);

String sql = request.getParameter(”SQL“);

if(sql == null){

sql = ”“;

}

dsn =(String)session.getAttribute(”SqlHelper.DSN“);

} else {

session.setAttribute(”SqlHelper.DSN“, dsn);

}

* 安全代码示例

String dsn = XSSCheck.getParameter(request,”DSN“);

String sql = request.getParameter(”SQL“);

if(sql == null){

sql = ”“;

}

dsn =(String)session.getAttribute(”SqlHelper.DSN“);

} else {

session.setAttribute(”SqlHelper.DSN“, dsn);

}

2.3 不安全的反射(Unsafe Reflection)

* 风险及危害

攻击者能够建立一个不可预测的、贯穿应用程序的控制流程,使得他们可以潜在地避开安全检测。攻击者能够建立一个在开发者意料之外的、不可预测的控制流程,贯穿应用程序始终。这种形式的攻击能够使得攻击者避开身份鉴定,或者访问控制检测,或者使得应用程序以一种意料之外的方式运行。如果攻击者能够将文件上传到应用程序的classpath或者添加一个classpath的新入口,那么这将导致应用程序陷入完全的困境。无论是上面哪种情况,攻击者都能使用反射将新的、多数情况下恶意的行为引入应用程序。* 应对措施

开发者可以定制一份白名单,通过关键字关联需要实例化的类,http请求中传递是不是实际的类名,而是关键字,开发者得到关键字后在白名单中寻找需要的信息,进行实例化。* 非安全代码示例

String className = request.getParameter(”classname“);

if((className!= null)&&((className = className.trim()).length()!= 0)){

// Attempt to load class and get its location.try {

ProtectionDomain pd = Class.forName(className).getProtectionDomain();

if(pd!= null){

CodeSource cs = pd.getCodeSource();* 安全代码示例

String classNameKey = request.getParameter(”classname“);

String className=WhiteList.get(classNameKey);

if((className!= null)&&((className = className.trim()).length()!= 0)){

// Attempt to load class and get its location.try {

ProtectionDomain pd = Class.forName(className).getProtectionDomain();

if(pd!= null){

CodeSource cs = pd.getCodeSource();

注1:WhiteList.get其具体实现如下:

1、从描述白名单的文件中,读出白名单列表;

2、根据传入的关键值寻找该白名单的真实值;

3、返回该值,如果没有找到,抛出异常。2.4 SQL 注入(SQL Injection)

* 风险及危害:

SQL注入是一种常见攻击方式,由于开发者采用sql拼凑的方式,用来自网络中不安全的参数形成sql语句访问数据库,攻击者常常采用该漏洞组合成非法的sql语句,使得信息泄露,访问到本来没有权限查看的内容或者直接破坏数据库信息等。发生SQL Injection有以下几种方式:

一、进入程序的数据来自不可信赖的资源。

二、数据用于动态构造一个SQL查询。* 应对措施:

一、开发者可以采用带参方式访问sql语句访问数据库,在java中即采用PreparedStatement的方式访问数据库。

二、如果开发者一定要使用sql拼凑的方式访问数据,对字符串要检查并过滤单引号',对于可能为整形或者浮点类型参数,要先转整形,或者浮点,再进行拼凑。* 非安全代码示例

String userid=(String)session.getAttribute(”classname“);

String param1= request.getParameter(”param1“);

StringBuffer strbuf=new StringBuffer();

strbuf.append(”select * from table1 where userid=“);

strbuf.append(userid);

strbuf.append(” and param1='“).append(param1).append(”'“);

String sql=strbuf.toString();

//当param1为 test' or 1=1

那么这条语句就为 select * from table1 where userid=$userid and param1='test' or 1=1这样查询出来的数据就超越了这个用户访问的范围。* 安全代码示例

方法一:采用PreparedStatement访问数据库。

String userid=(String)session.getAttribute(”classname“);

String param1= request.getParameter(”param1“);

StringBuffer strbuf=new StringBuffer();

String sql= ”select * from table1 where userid=? and param1=?“;方法二:检查并过滤特殊字符

String userid=(String)session.getAttribute(”classname“);

String param1= request.getParameter(”param1“);

StringBuffer strbuf=new StringBuffer();

strbuf.append(”select * from table1 where userid=“);

strbuf.append(userid);

strbuf.append(” and param1='“)

.append(SqlInjectCheck.checkStringValue(param1)).append(”'“);

String sql=strbuf.toString();

注:SqlInjectCheck.checkStringValue是公用函数,其实现如下:

1、将'转化成´

2、返回字符串。

2.5 系统信息泄露(System Information Leakage)* 风险及危害:

JSP中出现HTML注释(System Information Leakage:HTML Comment in JSP),攻击者可以通过html的注释得到用于攻击的信息。* 应对措施:

应该使用JSP注释代替HTML注释。(JSP注释不会被传递给用户)。* 非安全代码示例

* 安全代码示例

<%//此处是取得系统信息的注释%> 2.6 资源注入(resource injection)* 风险及危害:

允许用户可以通过输入来控制资源标识符,会让攻击者有能力访问或修改被保护的系统资源。

发生resource injection有以下两种方式:

1.攻击者可以指定已使用的标识符来访问系统资源。例如,攻击者可以指定用来连接到网络资源的端口号。

2.攻击者可以通过指定特定资源来获取某种能力,而这种能力在一般情况下是不可能获得的。* 应对措施

开发者可以定制一份白名单,通过关键字关联需要资源内容,http请求中传递是不是实际的资源内容,而是关键字,开发者得到关键字后在白名单中寻找需要的信息,进行后续操作。

* 非安全代码示例

String dsn = request.getParameter(”DSN“);DataSource ds =(DataSource)ctx.lookup(dsn);* 安全代码示例

String dsnKey = request.getParameter(”DSN ");String dsn =WhiteList.get(dsnKey);DataSource ds =(DataSource)ctx.lookup(dsn);

第二篇:JAVA开发个人简历

个 人 简 历

个人信息

姓名:xxxxxxx性别:x

电话:187-xxx7-xxxx年龄:22

邮箱: lxxxxxxx@xxx.com专业:软件技术应聘职位

Java软件开发工程师

专业技能

熟练掌握CoreJava编程,具有扎实的编程功底和良好的编码习惯

熟练掌握ssh(Struts2+hibernate+Spring)等轻量级框架

熟悉MVC开发模式

熟练使用Eclipse/MyEclipse工具进行Java软件开发

熟练Unix/Linux环境下Java的应用软件开发

熟练掌握MySQL、Oracle等数据库操作,能编写常用SQL语句

熟悉软件开发的主要流程,可以根据指定要求快速完成设计、编码等工作了解xml、HTML、JavaScript、Ajax技术

项目经验

一、通用电子商务平台(当当网购物系统)

开发环境:Linux

开发工具:MyEclipse8.6,Tomcat,MySQL

技术实现:Struts2+Hibernate+Spring+JavaScript+JSP+AJAX

项目描述:此系统为网上购物系统,用户可以用过该系统实现网上购物、注册、登录、浏览商

品、订货、生成订单功能。也包括对普通商品增删改查功能和购物车内书的数量的增删改功能。

责任描述:独自完成项目的整个开发过程

用户模块包括登录与注册,主要使用了AJAX对其输入的信息进行验证,结合Hibernate存储和验证用户登录等。

商品列表模块主要是用List集合来展示商品。

购物车模块则是使用Session技术来保存购物车,通过Struts2调用不通方法来操作购物车中的商品集合,实现对购物车的增删改查。

订单模块主要是用Hibernate对用户所买商品的记录进行存储。

经验总结:这个项目让我们把我们所学习的三大框架以及JS,Ajax等都联系起来。尤其是使用

Hibernate经常出现异常,在和组内成员讨论中逐步解决问题,并且更加完善代码。

通过这个项目不仅提高我个人能力,而且还促进了与他人合作的能力。

二、教学管理系统

开发环境:Linux

开发工具:MyEclipse8.6,Tomcat,MySQL

技术实现:Struts2+JavaScript+JDBC+AJAX

项目描述:项目实现了管理员对教师信息的增删改查和对学生选课的管理

责任描述:独立完成该项目的设计和实现,主要应用MVC模式的设计思想对项目进行划分。

采用JDBC对教师信息进行增删改查,在学生选课模块,使用到了Ajax来对选课进

行检验。

经验总结: 通过该项目让我对MVC设计模式有了更深一步的认识。在数据的存储方面尤其是

对JDBC对数据存储的乱码问题。通过与组内成员的不懈努力将其克服。极大的锻

炼了自己团队合作能力,项目计划能力以及写文档的能力独立解决问题的能力。

三、其它项目:BBS论坛,交友网等

实习经历

2011/12 — 2012/05北京xxx科技Java工程师实习生

教育背景

2010/09―2012/07开封大学软件技术

所获证书

C+ E国际软件工程师Java培训证书

自我评价

专业技能:虽然在大学里,我学习的是软件技术专业,已经具备了一些专业方面的基础知识。但是想在行业中有更好的发展就必须学习更多与企业应用相关的知识,所以我选择来达内进行培训。在学习期间,我踏实勤奋,按时完成课后练习及作业,不断的积累代码量,同时也能帮同学解决一些力所能及的问题。遇到难题能够主动动手查阅资料,解决问题。通过项目实战提高我的个人能力和团队协作能力。

综合能力:性格比较沉稳,为人诚恳,不怕吃苦,有高度的责任心和团队合作精神。对环境的适应能力强,有较强的团队意识和集体荣誉感,做事情比较认真仔细,对每一件事情都能认真对待,能很好的自我调节。乐于学习新的知识与技术。

第三篇:java开发面试题

1、编写程序

题目:古典问题:有一对公母猪,从出生后第3个月起每个月都生一对猪,小猪长到第三个月后每个月又生一对猪,假如猪都不死,问每个月的猪总数为多少?

答案:

public class lianxi01 {

public static void main(String[] args){

System.out.println(“第1个月的兔子对数: 1”);

System.out.println(“第2个月的兔子对数:1”);

int f1 = 1, f2 = 1, f, M=24;

for(int i=3;i<=M;i++){

f = f2;

f2 = f1 + f2;

f1 = f;

System.out.println(“第” + i +“个月的兔子对数: ”+f2);

}

}

}

2、是非题

2.1 Java程序中的起始类名称必须与存放该类的文件名相同。()

答案:正确

2.2 原生类中的数据类型均可任意转换。()

答案:错误

3、问答题

3.1 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

答案:

会执行,在return前执行。

3.2 sleep()和 wait()有什么区别:

答案:

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会 释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

4、数据库题

聚集函数的应用

编写一条sql语句,希望从艺术家表artist_tab中,看到只有一个专长specialty的是哪些专长

答案:seelctspecialty from artist_tab group by specialty having count(*)=1’;

第四篇:Java命名规范

Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。例如: net.frontfree.javagroup

类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。

例如: Circle

interface RasterDelegate;

interface Storing;

方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。例如: sendMessge

变量(Variables)除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。

变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。char c;

int i;

float myWidth;

实例变量(Instance Variables)大小写规则和变量名相似,除了前面需要一个下划线 int _employeeId;

String _name;

Customer _customer;

常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。

例如: MAX_VALUE

第五篇:java开发工程师个人简历

个人介绍

名:

别:

户口所在地:

龄:

毕 业 院校:

业:

历:

联 系 电 话:

箱:

求职意向 Java软件研发

英语水平

四级

专业技能

  熟练的运用java开发环境和项目构建

熟练掌握java程序设计语言,有牢固的J2SE基础,能够熟练使用JDBC、Servlet、JSP技术。熟悉C/S,B/S软件架构模式     熟练应用JSP/Servlet/JavaBean的MVC模式开发项目 会基本的EJB技术。熟练使用MyEclipse开发环境 熟悉数据库 SQL Server、Oracle,熟练掌握标准SQL语言

掌握关系数据库的原理。熟练使用Oracle、SQL Server进行软件系统开发。熟练使用Tomcat服务器。  具备一般的英语读写能力

初步了解Struts、Hibernate、Spring应用

项目经验

一、基于.NET的聊天系统

描述 :采用的是传统的C/S模式,基于.NET的COM+组件和微软的自带的消息队列(MSMQ),可以很方便的存贮和获取队列中的消息,并且采用管道通信,可以不关心其中的通信原理;该系统的功能比较简单,能够实现局域网通信

开发技术:ADO.NET + COM+组件 开发工具:MS Visual Studio 数 据 库:SQL Server 角 色:组长(单人开发)

负责模块:界面、数据库建立和管理、后台的编写等等 时 间:一周

二、基于Java的聊天系统

描述:本系统采用的任然是基于传统的C/S模式开发,前台用的是java.swing包做的界面,后台的编程采用了一些工厂模式,接口编程,给程序的扩展带来了很大的方便,数

据库则是利用的文本文件保存相关的信息,采用传统的sql从文本文件中获取自己要的信息,数据库能实现查询、添加、删除等功能。通信则是采用最底层的socket套接字编程;实现的主要功能有:闪屏,截图,托盘显示来信消息,多人会话等 开发技术: socket套接字+面向接口编程+工厂模式 开发工具: MyEclipse8.0 数 据 库:自己写的文本数据库 角 色:组长(单人开发)

负责模块:页面,数据库的编写,以及所有业务逻辑的编写 时 间:一周

三、连连看小程序

描述: 依然是传统的C/S模式开发,该程序有很多细节的地方考虑比较周到,例如只在有图片的地方产生label、图片遍历填充算法、图片连接的算法等,这在一定程度上减少了该程序的内存开销,同样采用了工厂模式,可以在不改变源程序代码的同时,增加新的关卡

开发技术:J2SE

开发工具: NetBeans 角 色:组长(单人开发)时 间:三天

四、库存管理系统

描述:本系统采用了b/s模式开发,其中用到了jsp、servlet、JavaBean、jstl标签库、el表达式等技术,本人负责入库单和出库单管理模块,其中包含的功能大致有根据进货单产生入库单,根据订货单产生出库单,以及直接导入入库单等,采用了mvc框架,和单例模式,工厂模式开发

开发技术:J2EE、servlet、jsp、JavaBean、el表达式、jndi等等 开发工具: Myeclipse 角 色:组员 时 间:一周

自我评价

吃苦耐劳,有强烈的敬业精神和团队协作精神,能够承受一定的压力,能迅速的适应各

环境,并融合其中同时对编程具有浓厚的兴趣。

有积极进取的工作精神和实际动手能力,对新知识、新技术有着强烈的求知欲与良好的接受能力。

下载Java安全开发规范word格式文档
下载Java安全开发规范.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Java开发工程师简历模版

    个人简历 个人基本信息 姓名: XXX 性别:男 年龄: 24岁政治面貌: 中共党员 籍贯: 河南-濮阳居住地: 北京-昌平学历: 本科 工作年限: 2年 手机: *** E-mail: @sina.com 求职......

    java开发自我介绍五篇范文

    在社交场合中,由于人际沟通或业务上的需要,时常要作自我介绍。本文是写写帮文库小编为大家整理的java开发自我介绍范文,仅供参考。java开发自我介绍范文篇一:Good morning !It......

    JAVA开发主管岗位职责

    1.参与软件的需求分析和框架设计。2.为客户提供项目建议,讨论开发需求,提供解决方案。3.带领开发小组,独立完成产品的开发工作。4.参与项目执行和变化的计划编制。5.确保项目开......

    Java开发环境实验报告[精选合集]

    浙江大学城市学院实验报告 课程名称面向对象程序设计实验项目名称 Java开发环境实验学生姓名专业班级学号一. 实验目的和要求 1. 建立并熟悉Java开发环境,熟悉Eclipse集成开......

    Java开发助理个人简历

    Java开发助理个人简历范文 在Java开发助理求职过程中,个人简历不过是第一关,接下来简历通过后还会有面试。而在面试中个人简历同样可以发挥其价值,求职者可以根据自己写的个人......

    java开发技术总结

    数据库 oracle-->数据库管理系统-->SQL、PL/SQL-->Java(JDBC+SQL) DBA,数据库编程程序员 1.概念导论 1)什么是数据库 有组织和结构存储数据。可以存储 字符、字节、图形、图......

    如何从零开始学习Java开发

    如何从零开始学习Java开发 1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一......

    Java Web开发课程设计

    Java Web 开发课程设计一、性质、目的和任务 本课程设计是在《Java Web开发》课程上设置的,是巩固学生所学理论知识、培养学生动手能力并使理论与实际相结合的重要实践环节。......