gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:36:08 30 4
gpt4 key购买 nike

这是防止动态 sql alter user 查询中的 sql 注入(inject)的好方法吗:

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;

因为,有时你有生成带有 "字符的随 secret 码的功能,当你这样做时:

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

您收到 ORA-06512/ORA-06502 异常。

最佳答案

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

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

一般规则(您在此处遵循):使用已建立并经过验证的安全机制,不要重新发明它们!

此外,像

这样的声明
select * from users where username = 'IAm"WayUp';

绝对合法且不危险。

您如何调用数据库中的函数/过程?你在那里也很脆弱,不是吗?

关于使用动态 SQL ALTER USER 查询的 SQL 注入(inject)预防,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49253300/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com