Oracle中的参数篡改

Oracle中的参数篡改,oracle,security,plsql,parameters,Oracle,Security,Plsql,Parameters,我使用Checkmarx工具扫描了我的Oracle软件包,查找安全漏洞。Checkmarx生成了一份报告,指出我的代码存在漏洞类型参数篡改。我将直接在数据库中运行代码,而无需任何前端应用程序。在这种情况下,参数篡改将成为一个问题。如果是,那么如何在包本身中添加验证以防止参数篡改 我不能把我的实际代码放在这里,但它是这样的: PROCEDURE TEST1(START_DATE IN DATE) IS BEGIN END_DATE := TO_DATE(TRUNC(LAST_DAY(S

我使用Checkmarx工具扫描了我的Oracle软件包,查找安全漏洞。Checkmarx生成了一份报告,指出我的代码存在漏洞类型参数篡改。我将直接在数据库中运行代码,而无需任何前端应用程序。在这种情况下,参数篡改将成为一个问题。如果是,那么如何在包本身中添加验证以防止参数篡改

我不能把我的实际代码放在这里,但它是这样的:

PROCEDURE TEST1(START_DATE IN DATE) IS 
BEGIN 
    END_DATE := TO_DATE(TRUNC(LAST_DAY(START_DATE)), 'DD-MON-RRRR');
表达式包含隐式日期转换。TO_DATE函数需要一个字符串;TRUNC返回的日期被隐式转换 转换为字符串,然后显式转换回日期。截止日期是多余的,可以删除

有很多方法可以使用NLS_DATE_FORMAT session参数来破坏日期转换,但我认为在这种情况下没有安全问题

但是,该工具明智地警告您此处的日期处理。TO_DATE函数始终是可疑的,并且99%的时间使用不当

表达式包含隐式日期转换。TO_DATE函数需要一个字符串;TRUNC返回的日期被隐式转换 转换为字符串,然后显式转换回日期。截止日期是多余的,可以删除

有很多方法可以使用NLS_DATE_FORMAT session参数来破坏日期转换,但我认为在这种情况下没有安全问题


但是,该工具明智地警告您此处的日期处理。TO_DATE函数始终是可疑的,99%的时间被不当使用。

参数篡改利用web前端应用程序中的弱点来更改参数值以达到恶意目的。对于存储过程,最大的担忧是SQL注入,攻击者会诱使数据库运行任意代码

如果存储过程不从web前端获取输入,那么参数篡改就不是真正的威胁。但是,如果业务逻辑在某种程度上是敏感的,特别是如果代码包含动态SQL操作,那么构建一些防御措施是值得的

用于验证输入参数的值和格式,并引发无效值的异常。例如,如果字符串应该包含日期,请确保它确实包含可以转换为日期的字符串

一般来说,强数据类型比使用字符串传递所有内容要好。在我看来,RR是一个bug:现在已经是2015年了,所有应用程序都应该使用四位数的年份


Oracle有一个名为DBMS_ASSERT的内置包。它的功能允许我们验证字符串参数的内容,以防止SQL注入

参数篡改利用web前端应用程序中的弱点来更改参数值以达到恶意目的。对于存储过程,最大的担忧是SQL注入,攻击者会诱使数据库运行任意代码

如果存储过程不从web前端获取输入,那么参数篡改就不是真正的威胁。但是,如果业务逻辑在某种程度上是敏感的,特别是如果代码包含动态SQL操作,那么构建一些防御措施是值得的

用于验证输入参数的值和格式,并引发无效值的异常。例如,如果字符串应该包含日期,请确保它确实包含可以转换为日期的字符串

一般来说,强数据类型比使用字符串传递所有内容要好。在我看来,RR是一个bug:现在已经是2015年了,所有应用程序都应该使用四位数的年份


Oracle有一个名为DBMS_ASSERT的内置包。它的功能允许我们验证字符串参数的内容,以防止SQL注入

很抱歉,无法根据您提供的信息回答您的问题。请不要使用日期拨打电话。很抱歉,无法根据您提供的信息回答您的问题。请不要使用日期拨打电话。我删除了TO_日期,但它仍然显示相同的问题。此外,当我扫描有编译错误的代码时,结果包含0个问题。我删除了截止日期,但仍然显示了相同的问题。此外,当我扫描有编译错误的代码时,结果包含0个问题。这是相同的代码,加了一个逗号。
END_DATE := TO_DATE(TRUNC(LAST_DAY(START_DATE)), 'DD-MON-RRRR');