首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止where子句中GET参数中的注入

如何防止where子句中GET参数中的注入
EN

Stack Overflow用户
提问于 2019-11-19 23:16:55
回答 1查看 92关注 0票数 2

在TYPO3中,我创建了一些分配了不同系统类别的记录。这些类别作为GET参数传递给页面(如:?pcat=7)。

为了防止注入,我在数据库请求中的以下where子句中使用了intval = 1

代码语言:javascript
复制
10 = CONTENT
    10 {
        table = tt_content
        select {

          [...]

          where {
            cObject = COA
            cObject {

               20 = TEXT
               20 {
                  data = GP:pcat
                  if.isTrue.data = GP:pcat   // only if GP is set
                  intval = 1                 // to prevent SQL-injection
                  noTrimWrap = | AND sys_category_record_mm.uid_local=| |
               }

            }

          }

          [...]

        }

        renderObj = ...

}

但这就足够了吗?你能给我一个提示如何让它更安全吗?

提前感谢您的帮助!!

EN

回答 1

Stack Overflow用户

发布于 2019-11-19 23:22:38

intval就足够了。这样,您就可以确保它始终是一个int类型,并且您不能只使用int类型进行任何SQL注入。

对于非int值,您应该使用标记,而不是直接将它们从GP变量放入where中。select中的标记被正确地转义和引用,以防止TypoScript注入。有关这方面的更多信息,请参阅https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Functions/Select.html#markers

我建议您始终使用标记,即使您可以使用intval来确保它的安全性。如果您习惯于使用标记方法,那么您永远不会意外地忘记intval,或者忘记它不应该像非int值那样使用。

你的TypoScript会变成这样:

代码语言:javascript
复制
10 = CONTENT
10 {
  table = tt_content
  select {
    [...]
    where {
      cObject = COA
      cObject {
        20 = TEXT
        20 {
          value = ###pcat###
          if.isTrue.data = GP:pcat
          noTrimWrap = | AND sys_category_record_mm.uid_local=| |
        }
      }
    }
    markers {
      pcat.data = GP:pcat
      pcat.intval = 1
    }
  }
  renderObj = ...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58937272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档