Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   "Правильная" организация аякса на typo3 (http://forum.typo3.ru/showthread.php?t=9137)

Lucifer 11.01.2011 20:39

"Правильная" организация аякса на typo3
 
Думаю сейчас, как правильнее организовать ajax запросы в своих расширениях наиболее "красиво". А конкретнее, по какому адресу должен вызываться мой скрипт:
1. http://mysite/typo3conf/ext/myExt/pi...jax.php?params
2. http://mysite/?type=myType&otherParametrs...
3. http://mysite/?id=currentId&tx_myExt...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 = ...
}
}

Lucifer 13.01.2011 22:24

eID - очень удобный способ, именно то, что мне было надо. Спасибо!

anweb 12.12.2011 15:53

Есть ли отличия при обращении к базе данных при использовании eID ? При таком раскладе не работает:
PHP код:

<?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

Цитата:

Сообщение от anweb (Сообщение 32619)
PHP код:

<?php
$a1 
t3lib_div::_POST('a1');
$a2 t3lib_div::_POST('a2');
$res $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','my_table','a1='.$a1);


Да у вас SQL-инъекция, батенька...

anweb 12.12.2011 17:28

Спасибо, что подсказали, Дмитрий! А как правильно то написать? :)

anweb 12.12.2011 17:53

Заработало вот так:
PHP код:

<?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 --
и ваш сервер умер надолго. Конечно, надо подобрать количество параметров в этом запросе таким, как число колонок в вашей таблице, но это совсем не сложно.

Правильно так:

PHP код:

$a1 t3lib_div::_POST('a1'); 
$a2 t3lib_div::_POST('a2'); 
$query 'SELECT * FROM my_table WHERE a1=' $GLOBALS['TYPO3_DB']->fullQuoteStr($a1'my_table'); 


anweb 13.12.2011 12:26

Спасибо большое, Дмитрий!


Часовой пояс GMT +4, время: 23:11.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot