Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Ajax и безопасность. Маленький вопрос. |

21.05.2008, 21:09
|
UID: 23319
USER: EST a1ien
Участник форума
Регистрация: 02.04.2006
Сообщений: 273
Провел на форуме: 1269624
Репутация:
114
|
|
Ajax и безопасность. Маленький вопрос.
Такой вопрос.
Везде в инете пишут что небезопасно передавать именно готовый java скрипт по запросу.
тоесть вот так.
Код:
response=req.responseText;
message = document.getElementById(Field);
eval(response);
якобы небезапасно(ну если передать сюда именно скрипт)
например.
А например вот что возвращает сервер.
Код:
PrintData(message,'t7','Логин свободен.');
И что может быть опасного я реально непонимаю.
PS Функция PrintData естественно описанна в JS.
Вобщем кто МОЖЕТ СКАЗАТЬ чтоможет быть опасного в возврате прямых команд на JS?
|
|
|

21.05.2008, 21:26
|
UID: 31163
USER: Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме: 849583
Репутация:
210
|
|
Возможно если скрипт, напрямую кидает код
$answer = "<script> document.getElementById({$id})</script>";
И отправилиб допустим через какуето функцию AddScript();
a если $id = "*/ Зловредный код /*";
вполне возможно...
|
|
|

21.05.2008, 21:43
|
UID: 41022
USER: astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Это может быть опасно, если в ответе содержатся данные, каким-либо образом поступившие от пользователя. Другое дело, что в большинстве случаев eval не нужен.
Приведённый пример это демонстрирует. Вместо того, чтобы возвращать JS-код и исполнять его:
Код:
eval("PrintData(message,'t7','Логин свободен.');");
можно возвращать с сервера только нужные данные (в данном случае - сообщение "Логин свободен.") и вызывать функцию:
Код:
PrintData(message,'t7',req.responseText);
Тем более, что нет смысла исполнять код eval("PrintData(message...)");, если message всё равно определяется в JS. Кроме того, такой код будет сложнее поддерживать - если нужно будет изменить JS, то придётся редактировать и серверный код, поскольку там дублируются имена переменных.
Ах, да. Ещё eval – это зло  .
Последний раз редактировалось astrologer; 21.05.2008 в 21:46..
|
|
|

21.05.2008, 22:02
|
UID: 23319
USER: EST a1ien
Участник форума
Регистрация: 02.04.2006
Сообщений: 273
Провел на форуме: 1269624
Репутация:
114
|
|
Если бы передавалось только сообщение то естественно его бы и писал. А там в зависимости от многих параметров. Вот и получается чем писать для некоторых отдельных случаев функцию проще вернуть. что надо делать.
Да и это так пока очень сильно черновой вариант.
И почему же евал зло? Он во всяком случае в некоторых местах даже быстрее работает.
если надо передавать неочень большой обем данных до и через Xml его тоже неочень хорошо передавать.
|
|
|

21.05.2008, 22:47
|
UID: 41022
USER: astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Если бы передавалось только сообщение то естественно его бы и писал. А там в зависимости от многих параметров. Вот и получается чем писать для некоторых отдельных случаев функцию проще вернуть. что надо делать.
Если заранее обдумать логику приложения, такого не будет. PHP ни к чему знать имена функций JS.
И почему же евал зло? Он во всяком случае в некоторых местах даже быстрее работает.
если надо передавать неочень большой обем данных до и через Xml его тоже неочень хорошо передавать.
Смайлик там не просто так  .
Разумеется, JSON – тот случай, когда eval действительно оправдан.
P.S. A можно посмотреть на функцию PrintData? Интересно...
|
|
|

21.05.2008, 22:51
|
UID: 52852
USER: d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.
|
|
|

21.05.2008, 22:54
|
UID: 23319
USER: EST a1ien
Участник форума
Регистрация: 02.04.2006
Сообщений: 273
Провел на форуме: 1269624
Репутация:
114
|
|
P.S. A можно посмотреть на функцию PrintData? Интересно...
Лучше ненадо я ее уже переписал а функция была примитивнейшая.
Вобщем не буду я позориться. Просто я хотел узнать вчем прикол. Как всегда все опасно если не фильтровать.
|
|
|

21.05.2008, 22:55
|
UID: 41022
USER: astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Сообщение от d_x
Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.
Конечно, дело не в опасности и не в скорости – важно использовать для каждого случая подходящие методы.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|