【问题标题】:Increment date/day in PL/SQL without + sign在不带 + 符号的 PL/SQL 中增加日期/日期
【发布时间】:2012-06-09 00:15:47
【问题描述】:

有没有办法在没有 + 号的情况下增加天数?

代替

to_date('06/07/2012 08:00:00','mm/dd/yyyy hh24:mi:ss')+1

让它增加一天或更长时间的东西。

【问题讨论】:

  • 您能解释一下为什么会有奇怪的需求吗?是 XY 问题吗?
  • 说哈哈,我认为允许将上述行添加为 URL 参数会带来安全风险,这可能会使您的应用程序容易受到 SQL 注入攻击。
  • 如前所述,这是一个 sql 注入风险,但是,我确信 JSP 具有某种 urlencode /urldecode 函数来处理此类标志,就像任何其他现代语言一样
  • @sayhaha 这肯定是永无止境的:) 开放式 Web 应用程序安全项目 OWASP 是此类信息的良好来源owasp.org/index.php/Main_Page,更具体地说是owasp.org/index.php/SQL_Injection
  • Itay 是正确的,这里要做的是保留 Oracle 语法以添加一天并 URLEncode 查询字符串中的参数。见forums.oracle.com/forums/…

标签: sql plsql oracle11g


【解决方案1】:

保留用于将日期添加到日期的 Oracle PL/SQL 语法,并使用 URLEncode 对字符串进行编码,该字符串将对查询字符串中的参数中的加号进行编码。

另见https://forums.oracle.com/forums/thread.jspa?threadID=740265&tstart=60

但是,我们必须注意,这里存在 SQL 注入攻击的风险,即使它是内部 Web 应用程序,也最好避免这种攻击。

【讨论】:

    【解决方案2】:

    我知道这已经得到解答,但是避免 SQL 注入的最佳做法是使用绑定变量。因此,假设您有一个 pl/sql 过程(注意:绑定变量可用于几乎所有 Java、C、C# 语言),那么您将如何使用绑定变量来完全避免 SQL 注入。

    create or replace function increment_day(date_string_in varchar2)
    return date
    is
    
    begin
       return to_date(date_string_in,'mm/dd/yyyy hh24:mi:ss')+1;
    
    
    end;
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多