如果在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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1082023/