我们有几个包需要解决一些SQL注入问题。我需要一些帮助来重写sql语句或清理输入。下面是veracode抛出错误的行号。
open 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;发布于 2020-10-26 03:03:59
我没有看到您的代码中有任何SQL注入问题-没有动态代码可以计算用户输入并退出预期的代码流。除非您的代码片段是在其他地方生成的,或者其中一个列名实际上是一个调用动态SQL的函数,否则您的代码看起来是安全的。
您使用了“清理输入”这一短语,这对数据库编程来说是一个糟糕的建议。尽管我很喜欢连环画XKCD,但兰德尔在这一点上错了。
绑定变量是避免SQL注入的最佳解决方案。我将利用这个机会(糟糕地)改变他的漫画:

https://stackoverflow.com/questions/64527085
复制相似问题