簡體   English   中英

我是否有在 BigQuery 中注入 SQL 的風險?

[英]Am I at risk for SQL injection in BigQuery?

我正在使用 Python 訪問 BigQuery 中的數據以進行一些數據分析。 我使用標准 SQL 查詢訪問數據:

"SELECT * FROM `project.dataset.table`"

我在多個數據集上使用相同的基本代碼,所以我采用了為項目、數據集和表使用環境變量的方法,給我一個看起來像這樣的實際查詢:

f"SELECT * FROM `{PROJECT}.{DATASET}.{TABLE}`"

我這樣做是為了稍微抽象一下我的表格。 我在我的 CI/CD 管道中運行 bandit 測試,這個使用變量的查詢失敗,表明可能存在注入。 現在我的查詢不能被用戶輸入更改,因為沒有任何地方我可以通過用戶輸入來訪問這個查詢。 我試圖弄清楚這是否是包含在我的代碼中的安全查詢。 我嘗試使用秘密管理器運行更多變量、更少變量,但都未能通過 bandit 測試。

我的直覺告訴我,變量的使用“隱藏”了我的一些信息,因為該表至少與查詢是分開的,而且由於沒有用戶可以輸入任何內容,所以沒有問題。 但是失敗的測試讓我有點擔心。 關於這是否安全的任何想法?

SQL 注入很important ,因為它允許攻擊者破壞和讀取敏感數據。

對於您的查詢,您可以:參數化查詢、參數化語句確保傳遞到 SQL 語句的參數得到安全處理。

BigQuery 支持查詢參數,以在使用用戶輸入構建查詢時幫助防止 SQL 注入。 此功能僅適用於標准 SQL 語法。

#例子

client = bigquery.Client()
query = """
SELECT word, word_count
FROM `bigquery-public-data.samples.shakespeare`
WHERE corpus = @corpus
AND word_count >= @min_word_count
ORDER BY word_count DESC;        
"""

job_config = bigquery.QueryJobConfig(
    query_parameters=[
        bigquery.ScalarQueryParameter("corpus", "STRING", "romeoandjuliet"),
        bigquery.ScalarQueryParameter("min_word_count", "INT64", 250),
    ]
)
query_job = client.query(query, job_config=job_config)  # Make an API request.

谷歌參考

是的

因為沒有用戶可以輸入任何東西所以沒有問題

如果攻擊者獲得了對您的環境變量的訪問權限,他們可以使用它們來執行 SQL 注入。 這是特權提升或升級

參數通常不適用於表名等標識符,僅適用於值。 您仍然可以通過過濾標識符來保護自己。 一些圖書館有一個 function 來執行此操作。 至少,確保它們不包含`

考慮使用 SQL 構建器,它將為您處理此問題。

暫無
暫無

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

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