python - 使用 web.py 的 web.database 时应该如何防止滥用?

标签 python sql-injection psycopg2 web.py python-2.4

我正在编写一个快速的 web.py 应用程序并从 web.input 获取数据...

import web
urls = (
    '/', 'something',
)
app = web.application(urls, globals())
db = web.database(dbn='postgres', db='database', user='username', password='password', host='127.0.0.1')
class something:
    def GET(self):
        i = web.input()
        return db.select('foo.table', where="column=$variable", vars={'variable':i.input, })
if __name__ == "__main__": app.run()

我是否应该担心将 i.input 传递给 db.select(或查询等),就像我作为 vars 的一部分所做的那样? SQL 注入(inject)的可能性等?


编辑: 我自己一直在玩这个,试图让一些令人讨厌的事情发生。玩引号,例如 http://localhost:8080/?id=13' or 'x' ='x结果在异常中显示了很好地转义的 sql:

<sql: 'select * from foo.table where id = "13\' or \'x\'=\'x"'>

我已经尝试了互联网提出的其他一些常见测试,我认为我很高兴 web.py 正在处理 sanitizer ......还有其他人可以发表评论吗?

最佳答案

http://webpy.org/cookbook/query说:

To prevent SQL injection attacks, db.query also accepts the "vars" syntax as described in db.select:

results = db.query("SELECT * FROM users WHERE id=$id", vars={'id':10})

This will escape user input, if you're trusting them for the "id" variable.

所以我想就这么简单。

当然,我意识到如果我要将其插入位置,我仍然需要验证用户输入...

关于python - 使用 web.py 的 web.database 时应该如何防止滥用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447920/

相关文章:

python - 如何使用字符串(从字典转换而来)更新 PostgreSQL 中的列?

python - 在 Python 中从 json 数组中提取数据对象

python - App Engine 的云存储客户端库默认重试逻辑是什么?

python - 从 MrJob 访问分布式缓存

sql-server - 使用T-SQL参数过滤表

mysql - 'Escaping query values'在sql中如何安全? (或者为什么它是危险的?)[SQL 注入(inject)]

mysql - 这种SQL注入(inject)的目的是什么?

django - 使用 psycopg2 返回一个值

python - 使用类的 __new__ 方法作为工厂 : __init__ gets called twice

python-3.x - 无法将 PostgreSQL 与 Python3.6 连接,但与 Python2.7 的代码相同。问题意外