使用web.py的web.database时,如何防止滥用?

Pri*_*cey 2 python sql-injection psycopg2 python-2.4 web.py

我正在写一个快速的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()
Run Code Online (Sandbox Code Playgroud)

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


编辑:我一直在玩这个,试图让一些令人讨厌的事情发生.例如,使用引用,http:// localhost:8080 /?id = 13'或'x'='x会导致在异常中显示很好的转义sql:

<sql: 'select * from foo.table where id = "13\' or \'x\'=\'x"'>
Run Code Online (Sandbox Code Playgroud)

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

Pri*_*cey 6

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

为防止SQL注入攻击,db.query还接受db.select中描述的"vars"语法:

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

如果您信任"id"变量,这将逃脱用户输入.

所以我猜它就这么简单.

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