这是防止动态 sql alter user 查询中的 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 异常。
您不应该尝试仅在数据库级别阻止 SQL 注入。一旦他们到达那里,他们基本上已经抓住了你。您应该使用参数、屏蔽输入并删除上层中已有的坏字符。像实体框架这样的工具(框架?)会自动删除危险字符。
Using DBMS_ASSERT.ENQUOTE_NAME
在这里做得很好,但我建议在上面的层中也这样做。
一般规则(您在此处遵循):使用已建立并经过验证的安全机制,不要重新发明它们!
此外,像这样的声明
select * from users where username = 'IAm"WayUp';
绝对合法且不危险。
如何调用数据库中的函数/过程?你在那里也很脆弱,不是吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)