在以前大大小小的项目中关于安全方面的也有了一些积累,只是没太整理,现在逐渐在这里梳理一下。


    sql连结串问题:
        在dao层组装sql时候,应该有所考虑,防止client端的欺诈行为,例如:

        SELECT * FROM users WHERE name= '" + username + "' AND pwd= '" + password + "';"

        如果用户在username中输入的是“wangtao'---”;在有的数据库中会将“---”看作注释符,因此pwd不会得到检查。

        解决方法:检查username的内容;改变连结sql的方式;或者通过select pwd出来,然后与password比较。

      ajax架构下面的身份认证问题: 


        在loggin.html中登陆,调用UserLogging类的loggin方法,UserLogging设置自身的登陆状态;
        在tree.html中调用UserLogging的isLogged方法,判断是否登陆,如果没有跳转到loggin.html中;

        关键所在: 使用frame组织一级html界面,在这些html界面中需要隐藏代码,而且只能从frame中打开页面。
                            UserLogging在dwr.xml中设置为scope="session"

        适用上述验证方法,由于全都在client处执行,因此安全性能不高; 可以通过在server端验证的方式强化访问控制。 例如:在server端的每个daoService的构造函数中读取session中的loggin标志即可,如果没有通过验证,可以抛出异常出来。

        dwr中提供了object访问context的方法,  即在类中:

    import uk.ltd.getahead.dwr.ExecutionContext;
    req = ExecutionContext.get().getHttpServletRequest();
    //等方式获取如下的环境对象:
        HttpServletRequest 
        HttpServletResponse
        HttpSession
        ServletContext
        ServletConfig
    应该说通过这种server端验证的方式,可以提供较强的身份验证功能。