2013-11-21 38 views
0

我試圖調試一個問題(不是我自己的代碼)與字符串越來越逃脫,並重新重新逃脫重複項目被重新保存。Typo3 v4.5.30自動轉義字符串?

該代碼使用了mysql_real_escape_string,但即使關閉了魔術引號,當我的動作被調用時,引用變量已經被引用,因此對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

這真的是一個基於extbase的擴展嗎?擴展可以基於extbase,基於pi_base或pur PHP代碼。我希望你的擴展擴展pi_base。如果你使用f.e. exec_INSERTquery mysql_real_escape_string被自動處理。 – maholtz

回答

1

TYPO3自動轉義POST變量,這是正確的。

在typo3中訪問它們的正確方法是t3lib_div::_POST($name),這會讓它們非轉義。

參見the documentation

+0

好,所以如果我從_Post直接得到它們,它們將會被轉移,然後我將它們粘在數據庫上,然後當它們被讀取時,我怎樣才能避開它們,所以當它們再次顯示時沒有斜槓。就像現在的斜槓一樣,這些項目會從網頁中重新獲得。 –

+0

請勿使用$ _POST。就這麼簡單。 – cweiske

+0

請參閱我的更新,我試過了,但沒有奏效。 –