【发布时间】:2017-12-21 02:03:28
【问题描述】:
我正在编写一个类,用作更大的建模算法的一部分。我的部分进行空间分析以计算从某些点到其他点的距离。有多种条件,涉及返回距离的数量、截止距离等。
目前,项目规范仅指示硬编码情况。即“函数#1需要列出点集A到点集B在500m内的所有距离。函数#2需要列出点集C到点集D的所有距离......”等等。
我不想硬编码这些参数,开发模型下一阶段的人也不想,因为显然他们想调整参数或可能在其他项目中重新使用算法有不同的条件。
现在的问题是我正在使用 psycopg2 来执行此操作。这是我工作的标准,所以我没有选择偏离它的选择。我已经读过,由于 SQL 注入的明显原因,公开将作为参数放入执行查询的参数是一个非常糟糕的主意。但是,我认为 psycopg2 会自动清理 SQL 输入。我认为问题在于使用AsIs 函数。
简单的解决方案就是按照项目中的规定对其进行硬编码,但这对我来说感觉很懒惰和草率。我不喜欢做懒惰和马虎的工作。
允许用户输入将输入到 psycopg2 执行的查询中的参数是否完全安全?还是只是使用AsIs 使其不安全?如果我想让用户能够输入这些参数,我是否必须自己负责对输入进行消毒,如果是这样,是否有一种快速简便的方法来做到这一点,例如使用另一个 python 库或什么?
【问题讨论】:
标签: python postgresql postgis psycopg2