如何防止在子句中插入GET参数

问题描述 投票:1回答:1

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

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

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 = ...

}

但是就足够了吗?您是否对我有提示,如何使它更安全?

提前感谢您的帮助!

get typo3 typoscript
1个回答
2
投票

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

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

我建议您始终使用标记,即使您可以使用intval使其安全。如果您习惯于使用标记方法,那么您永远不会偶然忘记intval或忘记它不应该与非整数值一起使用。

您的TypoScript将变成这样:

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 = ...
}
© www.soinside.com 2019 - 2024. All rights reserved.