Просмотр полной версии : "Правильная" организация аякса на typo3
Думаю сейчас, как правильнее организовать ajax запросы в своих расширениях наиболее "красиво". А конкретнее, по какому адресу должен вызываться мой скрипт:
1. http://mysite/typo3conf/ext/myExt/pi/myExtAjax.php?params
2. http://mysite/?type=myType&otherParametrs...
3. http://mysite/?id=currentId&tx_myExt_ajax=1&otherParametrs...
4. http://mysite/?id=myExtId&myExtParametrs...
5. как то еще? )
Такие вот варианты надумал. Хотелось бы знать, кто как считает оптимальнее?
Valery Romanchev
11.01.2011, 22:12
есть два штатных способа
- eID скрипт (примеры можно посмотреть в экстеншене comments)
- c помощью type и TS кода типа
someThing = PAGE
someThing {
typeNum = 1056
config {
disableAllHeaderCode = 1
}
10 = USER_INT
10 {
userFunc = ...
}
}
eID - очень удобный способ, именно то, что мне было надо. Спасибо!
Есть ли отличия при обращении к базе данных при использовании eID ? При таком раскладе не работает:
<?php
if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!');
tslib_eidtools::connectDB();
$a1 = t3lib_div::_POST('a1');
$a2 = t3lib_div::_POST('a2');
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','my_table','a1='.$a1);
$tRows = array();
$this->internal['currentRow'] = '';
while ($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$tRows[] = $this->internal['currentRow'][$a2];
}
$content = implode('',$tRows);
echo $content;
?>
Dmitry Dulepov
12.12.2011, 17:23
<?php
$a1 = t3lib_div::_POST('a1');
$a2 = t3lib_div::_POST('a2');
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','my_table','a1='.$a1);
Да у вас SQL-инъекция, батенька...
Спасибо, что подсказали, Дмитрий! А как правильно то написать? :)
Заработало вот так:
<?php
if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!');
tslib_eidtools::connectDB();
$a1 = '"'.t3lib_div::_POST('a1').'"';
$a2 = t3lib_div::_POST('a2');
$query = 'SELECT * FROM my_table WHERE a1='.$a1;
$res = mysql_query($query);
while ($rows = mysql_fetch_assoc($res)) {
echo $rows[$a2];
}
?>
На самом ли деле здесь есть проблема с безопасностью? Как её решить?
Dmitry Dulepov
13.12.2011, 12:21
К сожалению, есть. Передаете параметр как:
1" UNION SELECT BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM fe_users --
и ваш сервер умер надолго. Конечно, надо подобрать количество параметров в этом запросе таким, как число колонок в вашей таблице, но это совсем не сложно.
Правильно так:
$a1 = t3lib_div::_POST('a1');
$a2 = t3lib_div::_POST('a2');
$query = 'SELECT * FROM my_table WHERE a1=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($a1, 'my_table');
Спасибо большое, Дмитрий!
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot