MS RFC 90:按IP列表启用/禁用OGC Web服务中的层¶
- 日期
2013/02/14
- 作者
塔玛斯塞克勒斯
- 联系方式
gmail.com上的szekerest
- 状态
接受(2013/03/02),实施
- 版本
映射服务器6.3-dev
1。概述¶
此RFC提供按IP列表启用或禁用OWS层的选项。其目的是让管理员定义通过其IP识别的用户列表,以允许或拒绝访问一个或多个特定的WXS层。
2。建议的解决方案¶
这个添加将在mapfile的web/metadata部分和/或每个单独层的metadata部分提供另外两个参数。
ows_allowed_ip_list:包含允许的IP地址或范围列表
ows_denied_ip_list:包含拒绝的IP地址或范围的列表
这些参数既支持一个文件中的地址列表,也支持直接在 Mapfile 中提供值的能力(在只指定多个IP或范围的情况下)。
在内联设置IP列表时,我们可以使用空格作为分隔符,例如:
LAYER
METADATA
"ows_allowed_ip_list" "123.45.67.89 11.22.33.44"
END
END
或者我们可以指定一个包含IP地址列表的文件(文件中的IP和范围用空格或换行符分隔)
LAYER
METADATA
"ows_allowed_ip_list" "file:/path/to/list_of_ips.txt"
END
END
我们还可以使用 CIDR notation 例如:“192.168.1.0/24”
设置ows_allowed_ip_列表将拒绝列表中未指定的所有其他IP,设置ows_denied_ip_列表将允许列表中未指定的所有其他IP。当我们同时允许和拒绝给定的IP时,将优先拒绝。
设置 ows_enable_request (加入) MS RFC 67 )也将被考虑在内。禁用的请求不能被IP列表重新启用,但是我们可以在启用的OGC Web服务中通过IP列表限制对layes子集的访问。
我们还可以使用相应的特定于服务的设置(如 wms_allowed_ip_list 或 wfs_allowed_ip_list)
此添加将支持同时使用IPv4和IPv6 IP地址。
三。禁用库存CGI操作¶
我们还需要通过使用stock cgi操作(模式=…)来防止客户端绕过IP限制。因此,我们在mapfile的web部分添加一个新参数(ms_enable_modes),以控制应启用哪些模式。这个 ms_enable_modes 将依赖于启用请求的当前实现,因此可以使用星号“*”指定所有模式和前面的感叹号“!”可用于否定给定条件。
为了保持向后兼容性,如果我们不指定 ms_enable_modes 然后所有模式都被启用和调度。
使用OGC Web服务时,我们不需要通过URL指定模式,因此我们可以使用以下设置阻止所有CGI模式:
WEB
METADATA
# Block all CGI modes by default for this mapfile
"ms_enable_modes" "!*"
END
END
这将只分派那些不由URL设置显式模式的请求。如果所有现有用户只想提供OGC Web服务,建议他们在 Mapfile 中包含此设置。
我们还可以有选择地启用模式,如下所示:
WEB
METADATA
# Enable Only MAP and LEGEND modes for this mapfile
"ms_enable_modes" "!* MAP LEGEND"
END
END
要启用除地图以外的所有模式:
WEB
METADATA
# Enable all modes except MAP for this mapfile
"ms_enable_modes" "!MAP"
END
END
如果禁用了URL指定的模式,MapServer将提供以下错误消息:
“指定的模式…当前映射配置不支持“
在这个RFC的范围内,我们不打算支持 ms_enable_modes.
4。实施细节¶
这一变化将利用 MS RFC 67 这使得实现相当简单。大多数功能都是通过向mapows.c添加新的函数(msowsipdisabled、msowsipinmetadata、msowsipinlist、msowsipparse)来提供的,以检查特定的IP是否被禁用。msowsipdisabled函数从msowsrequestisenabled和msowsrequestlayersensabled调用,以防止将禁用的层添加到启用的层列表中。
msowsiparse将把sting表示和子网解析为字节数组。为了测试IP是否匹配,我们确保每个字节位置都符合以下条件
(ip1[i] & mask[i]) == (ip2[i] & mask[i])
字节数组的长度可以是4(IPv4)或16(IPv6)。
对于IPv6,我们支持十六进制数字的上下两种情况,并支持省略每个段的尾随零。我们还将通过使用双冒号“:”例如:2001:0db8::ff00:0042:8329来支持后续包含零的segmens的te速记,在解析ipv6时,我们将ips和掩码的每个段都写为无符号的short,这两种格式都适用于big endian和little endian内存表示。
设置 ms_enable_modes 将直接在mscgisetmode中实现(在mapservutil.c中)。实现将显式调用当前msowsparseRequestMetadata函数:
if (mapserv->Mode >= 0)
{
int disabled = MS_FALSE;
const char* enable_modes = msLookupHashTable(&mapserv->map->web.metadata, "ms_enable_modes");
if (!msOWSParseRequestMetadata(enable_modes, mode, &disabled) && disabled) {
/* the current mode is disabled */
msSetError(MS_WEBERR, "The specified mode '%s' is not supported by the current map configuration", "msCGISetMode()", mode);
return MS_FAILURE;
}
}
5。受影响的文件¶
mapows.c:实现并调用msowsipdisabled、msowsipinmetadata、msowsipinlist、msowsipparse方法
mapservutil.c:实现和 ms_enable_modes 逻辑
7。向后兼容性问题¶
不需要,新功能。
8.文档¶
在本增补的范围内,我们还将更新以下文件:
SOS Server :添加 sos_allowed_ip_list , sos_denied_ip_list
WCS Server :添加 wcs_allowed_ip_list , wcs_denied_ip_list
WFS Server :添加 wfs_allowed_ip_list , wfs_denied_ip_list
WMS Server :添加 wms_allowed_ip_list , wms_denied_ip_list
MapFile/WEB :添加 ms_enable_modes 在Web元数据部分
9。赞助¶
在Regione Toscana-Settore Sistema Informativo Territoriale ed Ambientale的资助下为Faunalia开发(http://www.faunalia.it)。项目:“Sviluppo Instrumenti Software per il Trattamento di Dati geografici basati su quantumgis e postgis(CIG 0494241492)”。
10。投票历史¶
托马斯·邦福特-0汤姆·克莱迪斯+1丹尼尔·莫里塞特+1塔玛斯·齐克雷斯+1斯蒂芬·伍德布里奇+1