DWR高级主题之DWR安全机制
----------
很多其他Ajax工具对安全性考虑不够,让你直面安全威胁。DWR提供一些安全机制,你也许会发现它非常适合自己的需求。DWR使用多层安全保障方法,但是,至少有一个机制必须始终启用。
1. 默认拒绝
无须做任何设置,DWR会自动采用"默认拒绝"方法。这意味着, 在默认情况下,DWR不允许任何类被远程访问。回想一下希望远程访问的每个类,必须在配置文件中添加 <create>元素。这个<create>元素还应该被嵌套在 <allow>元素中。通过添加这种信息条目,可以告诉DWR,指定类的远程调用被授权了。但是,如果没有在这个配置文件中添加相应的信息条目,则远程调用会被禁止。
----------
很多其他Ajax工具对安全性考虑不够,让你直面安全威胁。DWR提供一些安全机制,你也许会发现它非常适合自己的需求。DWR使用多层安全保障方法,但是,至少有一个机制必须始终启用。
1. 默认拒绝
无须做任何设置,DWR会自动采用"默认拒绝"方法。这意味着, 在默认情况下,DWR不允许任何类被远程访问。回想一下希望远程访问的每个类,必须在配置文件中添加 <create>元素。这个<create>元素还应该被嵌套在 <allow>元素中。通过添加这种信息条目,可以告诉DWR,指定类的远程调用被授权了。但是,如果没有在这个配置文件中添加相应的信息条目,则远程调用会被禁止。
读者肯定会认识到,这种措施实际上还存在一个潜在的安全漏洞:在默认情况下,被授权类的所有方法都可以通过远程调用来访问。在通常情况下,这样做就可以了,因为我们平常的代码组织习惯是一个类始终包含可以远程调用的所有"安全"方法。其实,我们也可以这样设计,类中部分方法可以安全地远程调用,部分方法不允许远程调用。如例,我们不希望远程调用divide()方法。我们可以简单地添加一个<exclude>元素。现在,存在一个<exclude>元素和一个<create>元素的子元素<include>元素。这两个元素是互斥的,也就是说,可以使用<include>元素来指定能够远程调用的方法列表(没有列出来的方法都是不可以远程调用的),或者使用<exclude>元素来指定不允许远程调用的方法列表(没有列出来的任何方法都是可以访问的)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC