【问题标题】:Is the fetchval in asyncpg safly for sql injections?asyncpg 中的 fetchval 是否适用于 sql 注入?
【发布时间】:2021-03-04 02:05:39
【问题描述】:

asyncpg 中的 fetchval 是否对 sql 注入安全?

https://magicstack.github.io/asyncpg/current/api/index.html?highlight=fetch#asyncpg.connection.Connection.fetch

async def get_user_id_by_bot_id(self, bot_id):
        record: Record = await self.pool.fetchval(self.GET_USER_ID_BY_BOT_ID, (bot_id))
        print(record)
        return record 

感谢您的回答。

【问题讨论】:

    标签: python postgresql asyncpg


    【解决方案1】:

    是的,asyncpg 使用 PostgreSQL 的语法进行参数替换。只要您使用该功能,通过传递参数并使用$ 后跟参数的索引,您应该是安全的!

    您不应该像在代码中显示的那样将 args 放在一个元组中,而是这样做:

    record: Record = await self.pool.fetchval(self.GET_USER_ID_BY_BOT_ID, bot_id)
    

    更多关于如何正确使用参数替换的示例:

    record = await self.pool.fetchval("SELECT * FROM table WHERE id = $1;", my_id)
    
    record = await self.pool.fetchval("UPDATE table SET name = $1 WHERE id = $2 AND username = $3;", new_name, my_id, username)
    

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      相关资源
      最近更新 更多