ITPub博客

首页 > 数据库 > Oracle > 反恐精英之动态SQL和SQL注入-SQL注入-防卫SQL注入-显式格式化模型

反恐精英之动态SQL和SQL注入-SQL注入-防卫SQL注入-显式格式化模型

原创 Oracle 作者:LuiseDalian 时间:2014-02-16 13:27:21 0 删除 编辑

如果使用日期或数值连接到SQL或PL/SQL的文本中,并且不能使用绑定变量来传递它们,

则可以使用显式的格式化模型来把它们转换成文本,这是独立于运行的会话的NLS参数设置的。

可以确保转换后的值具有日期或数字的字面量的格式。

 

建议使用显式的独立于本地的格式化模型来构造SQL语句,不仅仅是出于安全的考虑,

也可以确保动态SQL语句可以在任何全局环境中正常运行。

--11g12_07_14.prc,针对11g12_07_11.prc的解决方法

CREATE OR REPLACE PROCEDURE get_recent_record (

    user_name      IN  VARCHAR2,

    service_type  IN  VARCHAR2,

    rec             OUT VARCHAR2)

IS

    query VARCHAR2(4000);

BEGIN   

    query := 'SELECT value FROM secret_records WHERE user_name='''

            || user_name

            || ''' AND service_type='''

            || service_type

            || ''' AND date_created> DATE '''

            || TO_CHAR(SYSDATE - 30,'YYYY-MM-DD')

            || '''';

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

    EXECUTE IMMEDIATE query INTO rec;

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

END;

-- 11g12_07_14.tst

-- 运行之前先设置会话变量

-- ALTER SESSION SET NLS_DATE_FORMAT='"'' OR service_type=''Merger"';

DECLARE

    record_value VARCHAR2(4000);

BEGIN

    get_recent_record('Anybody', 'Anything', record_value);

END;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1082077/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6043793