在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 = ...
}但这就足够了吗?你能给我一个提示如何让它更安全吗?
提前感谢您的帮助!!
发布于 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会变成这样:
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 = ...
}https://stackoverflow.com/questions/58937272
复制相似问题