Typo3 v4.5.30自动逃脱字符串?

时间:2013-11-21 17:20:01

标签: typo3 mysql-real-escape-string extbase magic-quotes-gpc

我正在尝试调试一个问题(不是我自己的代码),字符串会在项目重新保存时反复转义并重新转发。

代码使用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的地方,所以这种担心对我来说只是第二天性。

1 个答案:

答案 0 :(得分:1)

TYPO3自动转义POST变量,这是正确的。

在typo3中访问它们的正确方法是t3lib_div::_POST($name),这将使你无法转义。

请参阅the documentation