Java安全开发规范

  • 格式:doc
  • 大小:96.50 KB
  • 文档页数:7

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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的新入口,那么