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)
, который даст вам их уйти.
Смотрите документацию.