0

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

该代码使用 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' ); 

它在每次更新和创建之前运行,并正确添加斜杠(我不确定它如何在调用中使用我的表名,但它似乎工作得很好)。但是当我阅读内容并删除斜线以在我的模型中显示时:

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

4

1 回答 1

1

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

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

请参阅文档

于 2013-11-22T09:06:06.973 回答