安全编码规范Word下载.docx

上传人:b****5 文档编号:15813313 上传时间:2022-11-16 格式:DOCX 页数:19 大小:192.19KB
下载 相关 举报
安全编码规范Word下载.docx_第1页
第1页 / 共19页
安全编码规范Word下载.docx_第2页
第2页 / 共19页
安全编码规范Word下载.docx_第3页
第3页 / 共19页
安全编码规范Word下载.docx_第4页
第4页 / 共19页
安全编码规范Word下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

安全编码规范Word下载.docx

《安全编码规范Word下载.docx》由会员分享,可在线阅读,更多相关《安全编码规范Word下载.docx(19页珍藏版)》请在冰豆网上搜索。

安全编码规范Word下载.docx

批准人

1安全编码规范

1.1输入验证和数据合法性校验

程序接受数据可能来源于未经验证的用户,网络连接和其他不受信任的来源,如果未对程序接受数据进行校验,则可能会引发安全问题。

1.1.1避免SQL注入

使用PreparedStatement预编译SQL,解决SQL注入问题,传递给PreparedStatement对象的参数可以被强制进行类型转换,确保在插入或查询数据时与底层的数据库格式匹配。

StringsqlString="

select*fromdb_userwhereusername=?

andpassword=?

"

;

PreparedStatementstmt=connection.prepareStatement(sqlString);

stmt.setString(1,username);

stmt.setString(2,pwd);

ResultSetrs=stmt.executeQuery();

1.1.2避免XML注入

通过StringBulider或StringBuffer拼接XML文件时,需对输入数据进行合法性校验。

对数量quantity进行合法性校验,控制只能传入0-9的数字:

if(!

Pattern.matches("

[0-9]+"

quantity)){

//Formatviolation

}

StringxmlString="

<

item>

\n<

description>

Widget<

/description>

\n"

+

"

price>

500<

/price>

quantity>

+quantity+"

/quantity>

/item>

outStream.write(xmlString.getBytes());

outStream.flush();

1.1.3避免跨站点脚本(XSS)

对产生跨站的参数进行严格过滤,禁止传入<

SCRIPT>

标签

//定义需过滤的字段串<

script>

Strings="

\uFE64"

+"

script"

\uFE65"

//过滤字符串标准化

s=Normalizer.normalize(s,Form.NFKC);

//使用正则表达式匹配inputStr是否存在<

Patternpattern=Ppile(inputStr);

Matchermatcher=pattern.matcher(s);

if(matcher.find()){

//Foundblacklistedtag

thrownewIllegalStateException();

}else{

//...

}

1.2声明和初始化

1.2.1避免类初始化的相互依赖

例:

错误的写法:

publicclassCycle{

privatefinalintbalance;

privatestaticfinalCyclec=newCycle();

privatestaticfinalintdeposit=(int)(Math.random()*100);

//Randomdeposit

publicCycle(){

balance=deposit-10;

//Subtractprocessingfee

publicstaticvoidmain(String[]args){

System.out.println("

Theaccountbalanceis:

+c.balance);

类加载时初始化指向Cycle类的静态变量c,而类Cycle的无参构造方法又依赖静态变量deposit,导致无法预期的结果。

正确的写法:

//Insertedafterinitializationofrequiredfields

1.3表达式

1.3.1不可忽略方法的返回值

忽略方法的放回值可能会导致无法预料的结果。

publicvoiddeleteFile(){

FilesomeFile=newFile("

someFileName.txt"

);

someFile.delete();

if(!

someFile.delete()){

//handlefailuretodeletethefile

1.3.2不要引用空指针

当一个变量指向一个NULL值,使用这个变量的时候又没有检查,这时会导致。

NullPointerException。

在使用变量前一定要做是否为NULL值的校验。

1.3.3使用Arrays.equals()来比较数组的内容

数组没有覆盖的Object.equals()方法,调用Object.equals()方法实际上是比较数组的引用,而不是他们的内容。

程序必须使用两个参数Arrays.equals()方法来比较两个数组的内容

publicvoidarrayEqualsExample(){

int[]arr1=newint[20];

//initializedto0

int[]arr2=newint[20];

Arrays.equals(arr1,arr2);

//true

1.4数字类型和操作

1.4.1防止整数溢出

使用java.lang.Number.BigInteger类进行整数运算,防止整数溢出。

publicclassBigIntegerUtil{

privatestaticfinalBigIntegerbigMaxInt=BigInteger.valueOf(Integer.MAX_VALUE);

privatestaticfinalBigIntegerbigMinInt=BigInteger.valueOf(Integer.MIN_VALUE);

publicstaticBigIntegerintRangeCheck(BigIntegerval)throwsArithmeticException{

if(pareTo(bigMaxInt)==1||pareTo(bigMinInt)==-1){

thrownewArithmeticException("

Integeroverflow"

returnval;

publicstaticintaddInt(intv1,intv2)throwsArithmeticException{

BigIntegerb1=BigInteger.valueOf(v1);

BigIntegerb2=BigInteger.valueOf(v2);

BigIntegerres=intRangeCheck(b1.add(b2));

returnres.intValue();

publicstaticintsubInt(intv1,intv2)throwsArithmeticException{

BigIntegerres=intRangeCheck(b1.subtract(b2));

publicstaticintmultiplyInt(intv1,intv2)throwsArithmeticException{

BigIntegerres=intRangeCheck(b1.multiply(b2));

publicstaticintdivideInt(intv1,intv2)throwsArithmeticException{

BigIntegerres=intRangeCheck(b1.divide(b2));

1.4.2避免除法和取模运算分母为零

要避免因为分母为零而导致除法和取模运算出现异常。

if(num2==0){

//handleerror

result1=num1/num2;

result2=num1%num2;

1.5类和方法操作

1.5.1数据成员声明为私有,提供可访问的包装方法

攻击者可以用意想不到的方式操纵public或protected的数据成员,所以需要将数据成员为private,对外提供可控的包装方法访问数据成员。

1.5.2敏感类不允许复制

包含私人的,机密或其他敏感数据的类是不允许被复制

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1