簡體   English   中英

PDO_PGSQL驅動程序是否支持預處理語句?

[英]Does the PDO_PGSQL driver support prepared statement?

我在我的項目上使用PosgreSQL和PDO。 如此處所述, 准備好的語句如何保護免受SQL注入攻擊? 默認情況下,PDO不會對不支持它的數據庫驅動程序使用准備好的語句。 PosgreSQL數據庫驅動程序(PDO_PGSQL)是否支持預處理語句? 謝謝。

PDO默認情況下不使用本機預處理語句,這意味着它在內部模擬預處理語句,而不是使用實際存在的數據庫API。 您可以通過將PDO::ATTR_EMULATE_PREPARES設置為false來關閉該行為。

PDO::ATTR_EMULATE_PREPARES啟用或禁用准備好的語句的仿真。 一些驅動程序不支持本機准備的語句,或者對它們的支持有限。 使用此設置可以強制PDO始終模擬預處理語句(如果為TRUE ),或嘗試使用本機預處理語句(如果為FALSE )。 如果驅動程序無法成功准備當前查詢,它將始終退回到模擬准備好的語句。

http://www.php.net/manual/zh/pdo.setattribute.php

只是為了(希望)澄清您的陳述。

自0.9以來 ,PDO_PGSQL 確實支持本機准備的語句,該語句已發布將近10年。

簡短的版本是為了防止SQL注入而無關緊要的。

在數據庫驅動程序中正確實現和一致的參數轉義足以提供與使用服務器端參數化語句相同級別的SQL注入保護。

如果PDO使用PostgreSQL的bind-parse-execute協議來讓服務器處理參數化的語句,那將是很好的選擇,但這遠非至關重要。

建議人們使用參數化語句(通常不正確地稱為“准備語句”)的目的是確保它們與構造語句的方式一致。 如果所有轉義都通過具有正確編寫框架的單個入口點進行,並且您遵循有關使用該框架的嚴格規則,那么您不太可能留下意外的SQL注入漏洞。

實際上,您希望PDO對非DML / SELECT語句執行其參數化的語句仿真,因為PostgreSQL的有線協議不支持DDL的參數綁定。

暫無
暫無

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

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