MS RFC 59:向数据库连接类型添加变量绑定¶
- 作者
“小鸭”丹
- 联系
雅虎的丹利特
- 最后编辑
2010/02/20
- 状态
采用
- 版本
MAPServer 6
目的¶
使用MapServer、PostgreSQL和Oracle进行空间数据存储的两个主要数据库都提供了在SQL语句中“绑定”变量的能力。它们提供变量绑定的原因是为了防止需要解决SQL中的数据类型问题,并且防止SQL注入。各种MapServer应用程序从CGI请求中获取不受信任的用户输入,并将其插入到SQL语句中。这为SQL注入留下了一个开放向量。这也会导致一些问题,因为SQL需要正确地转义字符串和整数。不必提前知道这是有用的。
实施细节¶
需要能够以灵活的格式为各种数据库创建键值对。例如,Oracle可以使用一个命名的绑定变量,但PostgreSQL只接受数字。以下是PostgreSQL和Oracle中的变量绑定示例,以说明不同之处:
PostgreSQL::
select count(*) from parcels where city_id = $1
神谕::
select count(*) from parcels where city_id = :city_id
或者,也可以编写Oracle:
select count(*) from parcels where city_id = :1
这种对灵活性的需求很适合散列对象,在层对象中创建一个新的块来支持它可能是合适的。例如::
LAYER
...
BINDVALS
'1' '1345'
END
...
END
LAYER
...
BINDVALS
'city_id' '1345'
END
...
END
向后兼容性问题¶
实现是完全可选的,不提供任何向后兼容性问题。
文档¶
主线文档将需要添加bindvals块及其功能的描述。
文件冲击¶
mapfile.c
mapfile.h
mappostgis.c
maporaclespatial.c
mapserver.h
maplexer.c
maplexer.l
投票历史¶
由PSC在面对面代码冲刺期间投票
评审期意见¶