Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Ajax и безопасность. Маленький вопрос. (https://forum.antichat.xyz/showthread.php?t=71086)

EST a1ien 21.05.2008 21:09

Ajax и безопасность. Маленький вопрос.
 
Такой вопрос.
Везде в инете пишут что небезопасно передавать именно готовый java скрипт по запросу.
тоесть вот так.
Код:

response=req.responseText;
                        message  = document.getElementById(Field);
                        eval(response);

якобы небезапасно(ну если передать сюда именно скрипт)
например.
А например вот что возвращает сервер.
Код:

PrintData(message,'t7','Логин свободен.');
И что может быть опасного я реально непонимаю.

PS Функция PrintData естественно описанна в JS.
Вобщем кто МОЖЕТ СКАЗАТЬ чтоможет быть опасного в возврате прямых команд на JS?

Naydav 21.05.2008 21:26

Возможно если скрипт, напрямую кидает код
$answer = "<script> document.getElementById({$id})</script>";
И отправилиб допустим через какуето функцию AddScript();

a если $id = "*/ Зловредный код /*";
вполне возможно...

astrologer 21.05.2008 21:43

Это может быть опасно, если в ответе содержатся данные, каким-либо образом поступившие от пользователя. Другое дело, что в большинстве случаев eval не нужен.
Приведённый пример это демонстрирует. Вместо того, чтобы возвращать JS-код и исполнять его:
Код:

eval("PrintData(message,'t7','Логин свободен.');");
можно возвращать с сервера только нужные данные (в данном случае - сообщение "Логин свободен.") и вызывать функцию:
Код:

PrintData(message,'t7',req.responseText);
Тем более, что нет смысла исполнять код eval("PrintData(message...)");, если message всё равно определяется в JS. Кроме того, такой код будет сложнее поддерживать - если нужно будет изменить JS, то придётся редактировать и серверный код, поскольку там дублируются имена переменных.

Ах, да. Ещё eval – это зло :) .

EST a1ien 21.05.2008 22:02

Если бы передавалось только сообщение то естественно его бы и писал. А там в зависимости от многих параметров. Вот и получается чем писать для некоторых отдельных случаев функцию проще вернуть. что надо делать.
Да и это так пока очень сильно черновой вариант.
И почему же евал зло? Он во всяком случае в некоторых местах даже быстрее работает.
если надо передавать неочень большой обем данных до и через Xml его тоже неочень хорошо передавать.

astrologer 21.05.2008 22:47

Цитата:

Если бы передавалось только сообщение то естественно его бы и писал. А там в зависимости от многих параметров. Вот и получается чем писать для некоторых отдельных случаев функцию проще вернуть. что надо делать.
Если заранее обдумать логику приложения, такого не будет. PHP ни к чему знать имена функций JS.
Цитата:

И почему же евал зло? Он во всяком случае в некоторых местах даже быстрее работает.
если надо передавать неочень большой обем данных до и через Xml его тоже неочень хорошо передавать.
Смайлик там не просто так :).
Разумеется, JSON – тот случай, когда eval действительно оправдан.

P.S. A можно посмотреть на функцию PrintData? Интересно...

d_x 21.05.2008 22:51

Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.

EST a1ien 21.05.2008 22:54

Цитата:

P.S. A можно посмотреть на функцию PrintData? Интересно...
Лучше ненадо я ее уже переписал а функция была примитивнейшая.
Вобщем не буду я позориться. Просто я хотел узнать вчем прикол. Как всегда все опасно если не фильтровать.

astrologer 21.05.2008 22:55

Цитата:

Сообщение от d_x
Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.

Конечно, дело не в опасности и не в скорости – важно использовать для каждого случая подходящие методы.


Время: 21:16