如何解决如何防止PL / SQL中的SQL注入
我们有一些软件包需要解决一些SQL注入问题。我需要一些帮助来重写sql语句或清理输入。下面是veracode引发错误的行号。
打开c_ccl(p_part_nr,p_ctry_cd);
//源代码
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "schema"."Test_PKG" AS
v_data t_cla_class_data;
FUNCTION nat_eccn_cd( p_part_nr IN t_part_nr,p_ctry_cd IN t_ctry_cd )
RETURN t_us_eccn_cd IS
CURSOR c_ccl(p_part_nr CHAR,p_ctry_cd CHAR) IS
SELECT NAT_CCL_CD FROM CLSDBA.CLA_EXP_PART_CTRY e
WHERE e.PART_NR = p_part_nr AND e.CTRY_CD = p_ctry_cd
ORDER BY e.VAL_FROM_DT DESC;
v_ctry_cd char(4) := p_ctry_cd;
v_trf_cd char(4);
BEGIN
v_data.nat_eccn_cd := NULL;
open c_ccl (p_part_nr,p_ctry_cd);
fetch c_ccl INTO v_data.nat_eccn_cd;
close c_ccl;
return (trim(v_data.nat_eccn_cd));
exception when others then return NULL;
end;
解决方法
我的代码看不到任何SQL注入问题-没有动态代码可以评估用户输入并逃脱预期的代码流。除非您的代码段是在其他地方生成的,或者除非其中一个列名确实是调用动态SQL的函数,否则您的代码看起来是安全的。
您使用了“对输入进行消毒”这一短语,这对数据库编程来说是糟糕的建议。尽管我很喜欢漫画XKCD,但Randall弄错了这一点。
绑定变量是避免SQL注入的最佳解决方案。我将借此机会(不好)更改他的漫画:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。