安全编码规范Word格式文档下载.docx
- 文档编号:15855949
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:8
- 大小:17KB
安全编码规范Word格式文档下载.docx
《安全编码规范Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《安全编码规范Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
批准人
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反序列化要在程序最小权限的安全环境中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安全 编码 规范