我正在尝试调试一个问题(不是我自己的代码),字符串会在项目重新保存时反复转义并重新转发。
代码使用mysql_real_escape_string,但即使关闭了魔术引号,在调用我的动作时也会引用post变量,因此对mysql_real_escape_string的调用会使引号加倍。然后每次重新保存项目时,越来越多的斜线堆积起来。
所以我需要确保在转到数据库之前对项目进行转义(一次),然后在页面上显示时取消转义。
我的行动开始如此:
public function adminAction() {
$prizes = $_POST['tx_xxx_bingofrontend']['prize'];
//at this point my prize[] elements are already quoted, why?
foreach ($prizes as $key => $prize) {
foreach ($prize as $field => $value) {
// echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
// echo strip_tags($value) ;die;
// OFF gets printed
$cleanedValues[$field] = mysql_real_escape_string(strip_tags($value));
}
.... more code
我正在使用typo3 v4.5.30,是否有一个typo3设置或可能的扩展api调用,在我的操作代码触发之前,调用是否进行了转义?
如何确保字符串正确显示并正确重新保存?
谢谢!
更新: 我现在有了这段代码:
public function adminAction() {
$postsvars = t3lib_div::_POST();
$prizes = $postsvars['tx_xxx_xxfrontend']['prize'];
foreach ($prizes as $key => $prize) {
foreach ($prize as $field => $value) {
//echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
// echo strip_tags($value) ;die;
$cleanedValues[$field] = $GLOBALS['TYPO3_DB']->quoteStr(strip_tags($value),'tx_xxx_domain_model_prize' );
在每次更新之前运行并创建并正确添加斜杠(我不确定它在调用中如何使用我的tablename,但似乎工作得那么好)。但是,当我读取内容并删除斜杠以在我的模型中显示时:
public function UnEscapePrize( ){
$this->setTitle(stripslashes( $this->getTitle()));
..... other vars get un-escaped
}
删除斜杠会保存到数据库中,这不是我想要的。我只是想删除它们的视图。我怎么能这样做?
更新2: 或者我什么都不担心?在使用默认更新和添加方法时,typo3 4.5.3 / extbase 1.3是否容易受到sql注入攻击?如果它使用字符串concat拼凑sql然后它可能是但如果它使用预准备语句它不是。我来自一个仍然使用很多字符串concat sql的地方,所以这种担心对我来说只是第二天性。
答案 0 :(得分:1)