我正在使用DWR,这通常被称为 Easy Ajax for Java 。
但它可以通过URL bar
直接访问,如此
http://localhost:8080/myProjectName/dwr/
从这里我可以执行每个Ajax Call
,这被视为对应用程序安全的威胁,
有没有办法限制这个?
答案 0 :(得分:1)
我不确定你想要完成什么,但这里有一些建议:
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
中限制Web上可以使用哪些类和哪些函数的原因。有关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限制对功能的访问。