【发布时间】:2015-03-10 13:26:30
【问题描述】:
我使用的是DWR,也就是俗称的Easy Ajax for Java。
但是可以像这样通过URL bar直接访问
http://localhost:8080/myProjectName/dwr/
从这里我可以执行每一个Ajax Call,这被认为是对应用程序安全的威胁,
有没有办法限制这个?
【问题讨论】:
我使用的是DWR,也就是俗称的Easy Ajax for Java。
但是可以像这样通过URL bar直接访问
http://localhost:8080/myProjectName/dwr/
从这里我可以执行每一个Ajax Call,这被认为是对应用程序安全的威胁,
有没有办法限制这个?
【问题讨论】:
我不确定您要完成什么,但这里有一些建议:
http://localhost:8080/myProjectName/dwr/ 仅在您设置后可用
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
在web.xml 中的 servlet 声明中。将 param-value 设置为 false,http://localhost:8080/myProjectName/dwr/ 将返回 404(找不到页面)。
即使您禁用调试模式,仍然可以运行您的函数。这就是为什么您可以在drw.xml 中限制哪些类以及这些类的哪些功能可从网络获得。有关dwr.xml 的详细信息,请查看DWR documentation
请记住,每个公开可用的功能都应检查是否允许用户运行它。我通常会创建这样的函数:
private void getLoggedInUser(){
WebContext ctx = WebContextFactory.get();
HttpSession session=ctx.getSession();
if(session.getAttribute("loggedIn")!=null && (Boolean)session.getAttribute("loggedIn")==true){
if(session.getAttribute("user")!=null){
try{
return (Person)session.getAttribute("user");
}catch (ClassCastException ex){
return null;
}
}else{
return null;
}
}else{
return null;
}
}
然后在通过网络提供的每个功能的开头,我会做类似的事情
Person user=getLoggedInUser();
if(user)==null return null;
请始终牢记,您网站的访问者可能会操纵 javascript。如果你通过 dwr 发布一个函数,假设它可以被任何人调用。这一点我怎么强调都不为过:在通过 dwr 发布的每个函数中,首先确保允许用户运行它,然后检查用户可能传递的任何参数是否有效。
更新:还可以使用 filters 限制对函数的访问。
【讨论】: