安全编码规范Word格式文档下载.docx
- 文档编号:18759225
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:25
- 大小:25.54KB
安全编码规范Word格式文档下载.docx
《安全编码规范Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《安全编码规范Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
背景2.........................................................................................................错误!
安全编码规范3
...........................................................................................................................5
3.1输入验证和数据合法性校验.......................................................................................5
3.1.1避免SQL注入...................................................................................................5
3.1.2避免XML注入..................................................................................................5
3.1.3避免跨站点脚本(XSS).................................................................................5
3.2声明和初始化...............................................................................................................6
3.2.1避免类初始化的相互依赖...............................................................................6
3.3表达式...........................................................................................................................7
3.3.1不可忽略方法的返回值...................................................................................7
3.3.2不要引用空指针...............................................................................................7
3.3.3使用Arrays.equals()来比较数组的内容....................................................8
3.4数字类型和操作...........................................................................................................8
3.4.1防止整数溢出...................................................................................................8
3.4.2避免除法和取模运算分母为零.......................................................................9
3.5类和方法操作...............................................................................................................9
3.5.1数据成员声明为私有,提供可访问的包装方法...........................................9
3.5.2敏感类不允许复制...........................................................................................9
3.5.3比较类的正确做法.........................................................................................10
3.5.4不要硬编码敏感信息.....................................................................................10
3.5.5验证方法参数.................................................................................................10
3.5.6不要使用过时、陈旧或低效的方法.............................................................11
3.5.7数组引用问题.................................................................................................11
3.5.8不要产生内存泄露.........................................................................................11
3.6异常处理.....................................................................................................................12
3.6.1不要忽略捕获的异常.....................................................................................12
3.6.2不允许暴露异常的敏感信息.........................................................................12
3.6.3不允许抛出RuntimeException,Exception,Throwable...................................13
3.6.4不要捕获NullPointerException或其他父类异常.........................................14
3.7多线程编程.................................................................................................................15
3.7.1确保共享变量的可见性.................................................................................15
3.7.2确保共享变量的操作是原子的.....................................................................16
3.7.3不要调用Thread.run(),不要使用Thread.stop()以终止线程............17
3.7.4确保执行阻塞操作的线程可以终止.............................................................17
3.7.5相互依存的任务不要在一个有限的线程池执行.........................................18
3.8输入输出.....................................................................................................................18
3.8.1程序终止前删除临时文件.............................................................................18
3.8.2检测和处理文件相关的错误.........................................................................18
3.8.3及时释放资源.................................................................................................19
3.9序列化.........................................................................................................................20
3.9.1不要序列化未加密的敏感数据.....................................................................20
页3第
3.9.2在序列化过程中避免内存和资源泄漏.........................................................20
反序列化要在程序最小权限的安全环境中3.9.3
.................................................22
页4第
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注入StringBuffer拼接XML文件时,需对输入数据进行合法性校验。
通过StringBulider或的数字:
0-9quantity进行合法性校验,控制只能传入对数量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();
)XSS1.1.3避免跨站点脚本(对产生跨站的参数进行严格过滤,禁止传入标签<
SCRIPT>
//定义需过滤的字段串<
script>
Strings=\﹤+script+\﹥;
//过滤字符串标准化
页5第
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类的静态变量Cyclec,而类类加载时初始化指向,导致无法预期的结果。
deposit正确的写法:
页6第
privatefinalintbalance;
privatestaticfinalintdeposit=(int)(Math.random()*100);
privatestaticfinalCyclec=newCycle();
//Insertedafterinitializationofrequiredfields
publicCycle(){
balance=deposit-10;
}
publicstaticvoidmain(String[]args){
System.out.println(Theaccountbalanceis:
1.3表达式
1.3.1不可忽略方法的返回值
忽略方法的放回值可能会导致无法预料的结果。
错误的写法:
publicvoiddeleteFile(){
FilesomeFile=newFile(someFileName.txt);
someFile.delete();
正确的写法:
if(!
someFile.delete()){
//handlefailuretodeletethefile
1.3.2不要引用空指针
致。
NULL值,使用这个变量的时候又没有检查,这时会导当一个变量指向一个NullPointerException。
在使用变量前一定要做是否为NULL值的校验。
页7第
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)throws
ArithmeticException{
if(pareTo(bigMaxInt)==1||pareTo(bigMinInt)==-1){
thrownewArithmeticException(?
瑮来牥漠敶晲潬屷);
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));
页8第
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安全 编码 规范