簡體   English   中英

Python psycopg2字符串插值格式與%

[英]Python psycopg2 string interpolation format vs %

根據psycopg2文檔( http://initd.org/psycopg/docs/connection.html )指出:

Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.

在警告中,它特別引用了不執行以下操作:

cur.execute(SQL % data)

此警告是否也適用於以下使用格式?

cur.execute(SQL.format(data))

我不知道format的內部原理,但是我假設它在下面使用%string interop,這將使它的用法不建議使用

SQL.format() (其中SQL是常規的SQL.format()字符串)實際上並未在SQL.format()使用%插值,但存在相同的陷阱:您替換的值無法正確地轉義為SQL(怎么可能是; Python不知道SQL是SQL語句),然后您的SQL語句可能會受到注入攻擊。

您的各種SQL模塊都有防止此問題的方法,應改為使用它們。

是的,它確實。 字符串插值方法很脆弱,因為它們允許SQL注入攻擊。 在參數化查詢中使用外部(用戶提供)數據作為參數(而不是構建查詢字符串)使這種攻擊變得不可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM