java在web开发安全性方面的总结

  • Post author:
  • Post category:java

1.       客户输入的原始数据进行校验不依赖于Script。虽然JavaScript等等的客户端的输入数据的校验即使比较方便也不能使用因为安全性方面的原因。脚本是不安全的,用户可能屏蔽脚本,我们可以将用户数据送入服务器端,在服务器上验证字符串的合法性。

2.       HTML的输入标识符中去除所有输入的尖括号'<‘ ‘ >’,

3.       HTML埋进数据的时候有一定HTML编码(‘<‘ ‘>’ ‘和’ ‘”‘ ‘ ‘ ‘ →’是<‘ ‘>’ ‘是μ”‘ ‘ &39;’的换每隔)了。(2)(3)由cross-site scripting(css)引起的,解决方法是避免脚本符号的出现。

 URLで許可される文字

 英数字「;」「/」「?」「:」「@」「&」「=」「+」「$」「,」「-」「_」「.」「!」「~」「*」「’」「(」「)」「%」

4.       需要保护的全部的网页要有用户认证机构。

登入后,把userID保存下来在SESSION中,在每个需要保护的页面追加脚本进行验证,如果session空,则验证失败,从新登陆。

<%

If Len(Session(“ID”)) = 0 Then

Response.Redirect “index.html”

End If

%>

下列信息做特殊处理:

*密码

*Web邮件的邮件内容等等的个人用数据

*名字 年龄、住所的个人信息

*Web应用系统内部的数据构造

*Web服务器内部的最大限度定期票等等的各种系统信息   

[1-3.]

5.       事前可以推断的sessionID不能定义, →[1-3.]

6.       关键的重要的数据参数发送时不要出现在URL中

利用post传递参数。并且对策:

*根据SSL的密码化通信

*干扰策略。

*对话期间劫机对策

7.       hidden字段的数据不能修改传递(hidden的值不能被显示,但是会被传递并且在html源文件中可以查看值,防止其值被修改并传递)不要用hidden去取数据,改善方法是可以利用session来保存hidden数据 →[1-5.]

8.       从WWW 浏览器被发送了的<SELECT> 的<OPTION>项的值,radio项的值,checkbox项的值都要进行校验,对于上述控件提交上来的数据开数据库查询是否合法。 →[1-6.]

9.       写SQL的时候与变量结合写。要先check再提交(对用户提交的变量在放入SQL文之前先过滤) →[2-1.]

10.   组装SQL的时候输入数据的 (‘)和分号 ( ; ) 要进行处理。原因同9) →[2-1.]

11.   不要在脚本中嵌入数据库的密码。关于敏感数据的设置,可以设置在配置文件中,windows可以设置在注册表中。 →[2-2.]

12.   存取数据库时用户的权限分开设置。不同的用户权限是不同的,可以借助数据库的权限设置来实现,这样有利于安全性的提高。 →[2-3.]

13.   JAVA类包的导入。只导入需要的类,不使用的包和类不要导入,这样做有利于提高安全性,防止他人利用多余的类取得信息,尤其是几个敏感的类包 →[3-1.]

14.   利用安全政策文件(policy)设定来控制文件的运行权限。

文件路径:${java.home}/lib/security/java.policy

package org.penglee.policy.test;

//permission java.io.FilePermission “c://winnt//system32//notepad.exe”, “execute”;

import java.io.IOException;

 

public class NoSecurityManager {

         public static void main(String[] args) {

//                     SecurityManager mySecurityManager = new SecurityManager ();

//                     System.setSecurityManager (mySecurityManager);

                       try {

                                     Runtime myRuntime = Runtime.getRuntime ();

                                     myRuntime.exec (“c://winnt//system32//notepad.exe”);

                       } catch (IOException e) {

                                     e.printStackTrace();

                       }

         }

}

→[3-1.]

15.   设置为私有类(private)来加以限制类中数据的修改,或者定义接口来实现。 →[3-2.]

16.   程序序列化后的数据是没有加密的,防止利用序列化后的数据读取敏感数据,可以利用transient来处理序列化的数据。→[3-3.]

17.   除明显地需要继承的类之外一律使用final类。这样可以防止利用继承来获取敏感信息。→[3-4.]

18.   利用AssertionError来抛错。详细参考该类的api文档→[3-5.]

19.   注意线程同步产生的数据不一致问题,增加数据的安全性。→[3-6.]

20.   输入中避免含有相对相对路径。含有相对路径时报错。原因可能导致兄弟文件夹被访问。→[4-1.]

 

26. 极力避免明文密码。敏感数据最好要加密,建议使用sha加密→[9-1.]

27. 用sha加密。→[9-1.]

28.29.利用程序检验路径(防止相对路径)检查文件名以及数据的安全性,含有特殊字符报错。→[9-2.]

30.31. 为了不让教多了十分小心地正在做登录时的错误信息弄错什么了。面向用户的错误信息不应该给的太足,以免用户由此推断出程序的内部结构的相关信息。→[9-3.]

32. 尽量小做需要特权的使用的数据处理的部分、 极力避开一般的数据处理用特权流行被实行了。使用权限较小的用户名来登录,尽量避开用特殊权限来处理一般数据。→[9-4.]

 

CSS—“cross-site scripting”

 

有不解的地方可以回电邮给我:penglee@263.net