首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pgdb能防止注入攻击吗?

pgdb能防止注入攻击吗?
EN

Stack Overflow用户
提问于 2013-04-25 00:00:49
回答 1查看 586关注 0票数 1

我有一段这样的代码:

代码语言:javascript
复制
db = pgdb.connect(
    database=connection['database'],
    user=connection['user'],
    host=connection['host'])
cursor = db.cursor()
# ask database
query = '''
    SELECT a, b, c
    FROM table
    WHERE a ILIKE %s;'''
try:
    cursor.execute(query, userInput)
except pgdb.Error, error:
    error = str(error)
    print json.dumps({
        'errorMessage': 'ERROR: %s' % error
    })

我在another forum上读到,像MySQLdb这样的python模块会进行转义,以防止注入攻击。我也看过documentation on pgdb,但它太薄了。最后,我尝试使用我自己的测试数据库进行自己的注入攻击,但我不确定我的测试是否足够。测试这一点的好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 02:17:48

当您使用execute method并将所有变量输入保存在参数列表(在您的示例中为userInput,这是安全的)时,所有的DB-API模块都可以防止SQL注入。

事实证明,对于pgdb,它实际上是通过对每个参数进行转义来获得SQL字面值,然后将它们注入到SQL查询中的占位符中。这并不是必须的:一些数据库连接器可以将参数作为单独的结构而不是查询字符串的一部分传递给它们的服务器,这样做可能会带来性能上的好处。最终,您不应该真正关心使用的是什么方法--您将参数分别传递给DB-API连接器,它负责以一种安全的方式工作。

当然,如果您自己开始将变量放入查询中(例如"WHERE a ILIKE '%s'" % userInput),pgdb或任何其他连接器都无法阻止您伤害自己。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16196806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档