Oracle-12c
在 Oracle 中編寫 SQL 注入證明動態 DDL
我需要編寫動態 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 注入的範例。