Android Converty问题解决方案

1.线程的使用

   不建议使用的方法:

      new Thread() {

          public void run() {      

                    doPost(mContext, url, params, callback);  

      }}.start();

建议使用:

new Thread(new Runnable() {
    @Override
    public void run() {
        doGet(url, callback);
    }
}).start();

原因:

J2EE 标准禁止在某些环境下使用 Web 应用程序中的线程管理,因为此时使用线程管理非常容易出错。线程管理起来很困难,并且可能还会以不可预知的方式干扰应用程序容器。即使容器没有受到干扰, 线程管理通常还会导致各种难以发现的错误,如死锁、race condition 及其他同步错误等。

2.随机数的使用

  不建议使用Random,因为Random的随机有一定的规律性。建议使用SecureRandom,因为SecureRandom的随机性更强一些。

3.try catch

   catch里面不建议使用e.printStackTrace(),这样会打印出系统信息,导致系统信息泄漏,建议使用log打印e.getMessage()。最好加入finally块处理。

4.在对对象和字符串进行操作时,要进行非空的判断。

5.类继承Thread时,不建议重写run方法,建议重写start方法,

 1)start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面 的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法 run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调 度其它线程。
  2)run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码; 程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。

6.常量要加final修饰符

7.在上线的代码中只输出必要的日志,并过滤非法的字段。防止log注入,打印出错误的信息。

8.不用的字段和方法应该删除

9.流资源和数据库资源必须关闭。防止攻击者故意触发资源泄漏,通过耗尽资源发起攻击。

10.sql语句参数化操作时,防止sql注入,建议:

   String sql = “delete from table1 where id=”;

   db.execSQL(sql,new String[]{“1111”});

11.Android service中调用onStartCommandIntent intentint flags,     int startId)方法时,intent需要判空,才可执行super.onStartCommandIntent intentint flagsint startId,如果intent为空,需要根据相应的情况返回不同的值:

   1):START_STICKY: 如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null
       2):START_NOT_STICKY非粘性的。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务
       3):START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
      4):START_STICKY_COMPATIBILITYSTART_STICKY的兼容版本,但不保证服务被kill后一定能重启。

12.在WebView加载网页的时候,如果是静态网页,不需要与本地通过js交互的,webiewjs属性不要设置为true,防止js注入。

13.

 

 

 

 

 

 

备注:可能遇到的问题的翻译

Poor Logging Practice:日志技术欠佳 

Use of a System Output Stream:使用一个系统的输出流

System Information Leak:系统信息泄漏

Poor Error Handling: Overly Broad Catch:缺少错误处理:过度捕捉

Poor Error Handling: Overly Broad Throws:缺少错误处理:过于宽泛的投入

Trust Boundary Violation:违反了管理界限(范围)

HTTP Response Splitting:HTTP相应破裂

Race Condition: Singleton Member Field:竞争条件:独立的成员字段

Missing Check against Null:丢失了反对null的检查

J2EE Bad Practices: Leftover Debug Code:J2EE 不好的做法:残余调试代码

Missing XML Validation:丢失文档的有效性验证

Null Dereference:空引用

Poor Style: Value Never Read:缺少形式,值未读

Code Correctness: Erroneous String Compare:代码的正确性:错误的字符串比较

Unreleased Resource: Streams :释放资源:流

Poor Style: Redundant Initialization:缺少的形式:冗余初始化

Insecure Randomness :不安全的随机性

Dead Code: Expression is Always true:不用的(无效的,失效的)代码:表达始终是true的:

J2EE Bad Practices: System.exit :J2EE不好的做法:系统退出

Redundant Null Check:检查冗余无效

System Information Leak: Missing Catch Block:系统信息泄漏:失踪块

Dead Code: Unused Method:不用的(无效的,失效的)代码:未使用的方法

Path Manipulation:路径控制

Dead Code: Expression is Always false:不用的(无效的,失效的)代码:表达始终是false

Dead Code: Unused Field:不用的(无效的,失效的)代码:未使用的领域:

Poor Error Handling: Empty Catch Block:缺少错误处理:空块

SQL Injection :SQL注入

JSON Injection :JSON注入

Unchecked Return Value:未检查返回值

参考链接:http://cwe.mitre.org/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值