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-интерфейса расширения, который вызывает escape-код до того, как сработает мой код действия?

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

Спасибо!

ОБНОВЛЕНИЕ: у меня теперь есть этот код:

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам