Я пытаюсь отлаживать проблему (а не мой собственный код), когда строки становятся экранированными и повторно экранируются повторно, когда элемент сохраняется.делает 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, поэтому это беспокойство - это всего лишь вторая натура для меня.
Действительно ли это расширение на основе extbase? Расширения могут основываться на extbase, на pi_base или pur PHP-коде. Я ожидаю, что ваше расширение расширяет pi_base. Если вы используете f.e. exec_INSERTquery mysql_real_escape_string обрабатывается автоматически. – maholtz