0

Я пытаюсь отлаживать проблему (а не мой собственный код), когда строки становятся экранированными и повторно экранируются повторно, когда элемент сохраняется.делает Typo3 v4.5.30 автоматические escape-строки?

Код использует 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 или, возможно, апи вызов расширения сделали где-то, что вызывает делает спасаясь перед моими действиями кодовых пожаров?

Как я могу убедиться, что строки правильно отображаются и правильно сохранены?

Спасибо!

UPDATE: теперь у меня есть этот код:

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: или я не беспокоюсь ни о чем? is 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

ok, так что, если я получаю их прямо от _Post, они будут сбежать, а затем я буду прикрепляться к БД, а затем, когда они начнут читать, как я их отменил, поэтому, когда они снова появятся, нет следов. так как теперь косые черты накапливаются, когда элемент получает переустановку с веб-страницы. –

+0

Не используйте $ _POST. Это так просто. – cweiske

+0

Пожалуйста, см. Мое обновление, я пробовал это, и он не работал. –

Смежные вопросы