在以前大大小小的项目中关于安全方面的也有了一些积累,只是没太整理,现在逐渐在这里梳理一下。
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端验证的方式,可以提供较强的身份验证功能。
浙公网安备 33010602011771号