Oracle-12c

在 Oracle 中編寫 SQL 注入證明動態 DDL

  • June 2, 2017

我需要編寫動態 DDL 語句,例如 CREATE USER ?。我知道我可以使用 EXECUTE IMMEDIATE 來執行此操作,但到目前為止,我還沒有發現不簡單連接字元串就可以合併動態參數的方法,這讓我對 SQL 注入持開放態度。

來自 PostgreSQL,我習慣於引用標識符或使用 FORMAT 將標識符安全地放入可以執行的格式化字元串中。Oracle(尤其是 12c)中有這樣的東西嗎?如果不是,如何安全地執行這種動態 SQL?

DBMS_ASSERT可能是您正在尋找的:

╔═════════════════════════════╦══════════════════════════════════════════════════════════════════════════════════════════════════╗
║         Subprogram          ║                                           Description                                            ║
╠═════════════════════════════╬══════════════════════════════════════════════════════════════════════════════════════════════════╣
║ ENQUOTE_LITERAL Function    ║ Enquotes a string literal                                                                        ║
║ ENQUOTE_NAME Function       ║ Encloses a name in double quotes                                                                 ║
║ NOOP Functions              ║ Returns the value without any checking                                                           ║
║ QUALIFIED_SQL_NAME Function ║ Verifies that the input string is a qualified SQL name                                           ║
║ SCHEMA_NAME Function        ║ Verifies that the input string is an existing schema name                                        ║
║ SIMPLE_SQL_NAME Function    ║ Verifies that the input string is a simple SQL name                                              ║
║ SQL_OBJECT_NAME Function    ║ Verifies that the input parameter string is a qualified SQL identifier of an existing SQL object ║
╚═════════════════════════════╩══════════════════════════════════════════════════════════════════════════════════════════════════╝

該頁面還連結到一些關於如何避免 SQL 注入的範例。

引用自:https://dba.stackexchange.com/questions/175220