首页 文章

使用动态SQL ALTER USER查询的SQL注入预防

提问于
浏览
0

这是防止动态sql alter user query中sql注入的好方法:

BEGIN
    z_ident :=  DBMS_ASSERT.ENQUOTE_NAME(ident);    
    z_pass := DBMS_ASSERT.ENQUOTE_NAME(password); 
    z_sql := 'alter user ' || z_ident || ' identified by ' || z_pass;
    EXECUTE IMMEDIATE z_sql;
END;

因为,有时您可以使用“字符”生成随机密码,当您执行以下操作时:

SELECT DBMS_ASSERT.ENQUOTE_NAME('"asd') FROM DUAL;

你得到一个ORA-06512 / ORA-06502例外 .

1 回答

  • 0

    您不应该尝试仅在数据库级别上阻止SQL注入 . 一旦他们到达那里,他们大多已经找到了你 . 您应该使用参数,屏蔽输入并删除上面图层中已有的不良字符 . 像Entity Framework这样的工具(框架?)会自动删除危险的字符 .

    使用 DBMS_ASSERT.ENQUOTE_NAME 在这里做得很好,但我建议在上面的层中也这样做 .

    一般规则(您在此处遵循): Use security mechanisms that are established and proven, don't reinvent them!

    而且,一个声明就好

    select * from users where username = 'IAm"WayUp';
    

    绝对合法,没有危险 .

    你如何调用数据库中的函数/过程?那里你也很难受,不是吗?

相关问题