反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-防衛SQL隱碼攻擊-繫結變數

LuiseDalian發表於2014-02-16

如果在PL/SQL中使用動態SQL,你必須檢查輸入的文字以確保是你所期望的。

可以使用下面的技術:

n  繫結變數

防止SQL注入攻擊的最有效的方法是使用繫結變數。資料庫只是使用它的值,並不解釋的他的內容。

使用繫結變數也可以提高效率。

-- 11g12_07_12.prc,可以解決11g12_07_09/10.prc中的問題

CREATE OR REPLACE PROCEDURE get_record_2 (user_name    IN  VARCHAR2,

service_type IN  VARCHAR2, rec OUT VARCHAR2)

IS

    query VARCHAR2(4000);

BEGIN

    --檢視傳入的引數的值

    DBMS_OUTPUT.PUT_LINE('引數user_name: ' || user_name);

    DBMS_OUTPUT.PUT_LINE('引數service_type: ' || service_type);

    query := 'SELECT value FROM secret_records WHERE user_name=:a AND service_type=:b';

 

    DBMS_OUTPUT.PUT_LINE('查詢: ' || query);

 

    EXECUTE IMMEDIATE query INTO rec USING user_name, service_type;

    DBMS_OUTPUT.PUT_LINE('結果: ' || rec);

END;

-- 11g12_07_12.tst

DECLARE

    record_value VARCHAR2(4000);

BEGIN

    --沒有SQL注入

    --get_record_2('Andy', 'Waiter', record_value);

    --SQL注入

    get_record_2('Anybody '' OR service_type=''Merger''--', 'Anything', record_value);

END;

2.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1082023/,如需轉載,請註明出處,否則將追究法律責任。

相關文章