安全编码规范Word文档下载推荐.docx

上传人:b****5 文档编号:21492217 上传时间:2023-01-30 格式:DOCX 页数:8 大小:17.08KB
下载 相关 举报
安全编码规范Word文档下载推荐.docx_第1页
第1页 / 共8页
安全编码规范Word文档下载推荐.docx_第2页
第2页 / 共8页
安全编码规范Word文档下载推荐.docx_第3页
第3页 / 共8页
安全编码规范Word文档下载推荐.docx_第4页
第4页 / 共8页
安全编码规范Word文档下载推荐.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

安全编码规范Word文档下载推荐.docx

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

安全编码规范Word文档下载推荐.docx

批准人

1安全编码规范

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

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

1.1.1避免SQL注入

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

StringsqlString="

select*fromdb_userwhereusername=andpassword="

;

PreparedStatementstmt=(sqlString);

(1,username);

(2,pwd);

ResultSetrs=();

1.1.2避免XML注入

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

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

if(!

("

[0-9]+"

quantity)){

.

}

1.2声明和初始化

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

例:

错误的写法:

publicclassCycle{

privatefinalintbalance;

privatestaticfinalCyclec=newCycle();

privatestaticfinalintdeposit=(int)()*100);

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

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

publicvoidarrayEqualsExample(){

int[]arr1=newint[20];

1、Clone方法抛出CloneNotSupportedException异常

classSensitiveClass{

publicfinalSensitiveClassclone()throwsCloneNotSupportedException{

thrownewCloneNotSupportedException();

}

1.2.2比较类的正确做法

如果由同一个类装载器装载,它们具有相同的完全限定名称,则它们是两个相同的类。

不正确写法:

etName().equals(

"

"

)){

正确写法:

.

1.2.3不要硬编码敏感信息

硬编码的敏感信息,如密码,服务器IP地址和加密密钥,可能会泄露给攻击者。

敏感信息均必须存在在配置文件或数据库中。

1.2.4验证方法参数

验证方法的参数,可确保操作方法的参数产生有效的结果。

不验证方法的参数可能会导致不正确的计算,运行时异常,违反类的不变量,对象的状态不一致。

对于跨信任边界接收参数的方法,必须进行参数合法性校验

privateObjectmyState=null;

nterrupt();

etCanonicalFile();

if(!

().startsWith("

c:

\\homepath"

("

Invalidfile"

);

return;

}catch(IOExceptionx){

try{

FileInputStreamfis=newFileInputStream(file);

}catch(FileNotFoundExceptionx){

("

1.2.5不允许抛出RuntimeException,Exception,Throwable

不正确的写法:

booleanisCapitalized(Strings){

if(s==null){

thrownewRuntimeException("

NullString"

privatevoiddoSomething()throwsException{

thrownewNullPointerException();

privatevoiddoSomething()throwsIOException{

1.2.6不要捕获NullPointerException或其他父类异常

booleanisName(Strings){

Stringnames[]=("

if!

=2){

returnfalse;

return(isCapitalized(names[0])&

&

isCapitalized(names[1]));

}catch(NullPointerExceptione){

正确的写法:

booleanisName(Strings)/*throwsNullPointerException*/{

1.3多线程编程

1.3.1确保共享变量的可见性

对于共享变量,要确保一个线程对它的改动对其他线程是可见的。

线程可能会看到一个陈旧的共享变量的值。

为了共享变量是最新的,可以将变量声明为volatile或同步读取和写入操作。

将共享变量声明为volatile:

finalclassControlledStopimplementsRunnable{

privatevolatilebooleandone=false;

@Overridepublicvoidrun(){

while(!

done){

().sleep(1000);

nterrupt();

}catch(IOExceptionie){

protectedfinalObjectwriteObjectout)throwsNotSerializableException{

thrownewNotSerializableException();

protectedfinalObjectreadObjectin)throwsNotSerializableException{

protectedfinalObjectreadObjectNoDatain)throwsNotSerializableException{

1.3.2在序列化过程中避免内存和资源泄漏

classSensorDataimplementsSerializable{

.}

publicstaticbooleanisAvailable(){...}

classSerializeSensorData{

publicstaticvoidmain(String[]args)throwsIOException{

ObjectOutputStreamout=null;

out=newObjectOutputStream(

newBufferedOutputStream(newFileOutputStream("

)));

while()){

//notethateachSensorDataobjectis1MBinsize

SensorDatasd=();

(sd);

}finally{

if(out!

=null){

();

//resetthestream

1.3.3反序列化要在程序最小权限的安全环境中

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

当前位置:首页 > 初中教育

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

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