SpringSide安全措施的几个建议

安全措施的几个建议

1,继承AtrutsEntityDao<>的Action要重载它的几个常用方法,让它们指向error,不法分子则无法通过浏览器用method来非法链接.

比如:
@Override
public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

return mapping.findForward("error");
}

当要执行删除操作时可用自己的方法-比如myDelete

public ActionForward MyDelete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
//some code
return  super.delete(mapping, form, request, response);
}


2,隐藏网址,包括Action和method的名称

例如要跳转到<a href = "Myxxx.do?method=myEdit&id=1234">修改</a> 时
可用javascript来替换----:<a href = "javascript:doWhat('xxx','Edit',1234)">修改</a>
在head中
    function doWhat(act,opr,id){   
    if(opr=='view')
    window.open("my"+act+".do?method="+opr+"&id="+id);//打开新窗口
    else
    window.location.href =" "my"+act+".do?method=my"+opr+"&id="+id+";//在本窗口打开
    }
既隐藏了网址,用户也无法在浏览器中来非法链接了



3,在修改数据库前要进行必要的权限判断

一个小例子
/*
*@param opr 当前进行的功能编码(在系统功能表中)
*@return true 用户拥有该功能
*@return false 用户没有该功能
*/
public boolean checkPower(String opr){
//参数opr是当前进行的功能编码(在系统功能表中)

if(opr!=null){

String oprParent = opr.substring(0, opr.length()-2);//父级编码,统一比子级编码少两位
String yhbm =(String) request.getSession().getAttribute("web_user_name");//用户名

List <Tbxtgn> subPlateList = sysFunctionManager.getSysuerAssignFunctions(yhbm, oprParent);//通过父级编码获得所有的子级功能

for(Tbxtgn gn:subPlateList){

if(gn.getGnbm().equals(opr)){//用户拥有该功能

return true;
}
}
}
return false;//用户没有该功能
}

4,模块功能不用进行检查,如果用户非法输入pid,但在数据库中是找不到权限的.

5,如果javascript也可以在浏览器中强行链接,上面的做法就不是安全的了

你可能感兴趣的:(JavaScript,Web,浏览器)