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' ); 

который запускается перед каждым обновлением и созданием, и он правильно добавляет косые черты (я не уверен, как он использует мое имя таблицы в вызове, но, похоже, работает так хорошо). Но когда я читаю материал и удаляю косые черты, чтобы они отображались так в моей модели:

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, так что это беспокойство для меня просто вторая натура.


person The Newbie Qs    schedule 21.11.2013    source источник
comment
Это действительно расширение на основе extbase? Расширения могут базироваться на extbase, на pi_base или на чистом PHP-коде. Я ожидаю, что ваше расширение расширяет pi_base. Если вы используете f.e. exec_INSERTquery mysql_real_escape_string обрабатывается автоматически.   -  person maholtz    schedule 25.11.2013


Ответы (1)


TYPO3 автоматически экранирует переменные POST, это правильно.

Правильный способ доступа к ним в typo3 — t3lib_div::_POST($name), что даст вам их без экранирования.

См. документацию.

person cweiske    schedule 22.11.2013
comment
Итак, если я получу их прямо из _Post, они будут экранированы, затем я вставлю их в БД, а затем, когда они будут прочитаны, как мне их отменить, чтобы, когда они снова отображались, не было косых черт. так как теперь косые черты накапливаются, когда элемент повторно сохраняется с веб-страницы. - person The Newbie Qs; 22.11.2013
comment
Не используйте $_POST. Это так просто. - person cweiske; 22.11.2013