Просмотр полной версии : Ajax и безопасность. Маленький вопрос.
EST a1ien
21.05.2008, 21:09
Такой вопрос.
Везде в инете пишут что небезопасно передавать именно готовый java скрипт по запросу.
тоесть вот так.
response=req.responseText;
message = document.getElementById(Field);
eval(response);
якобы небезапасно(ну если передать сюда именно скрипт)
например.
А например вот что возвращает сервер.
PrintData(message,'t7','Логин свободен.');
И что может быть опасного я реально непонимаю.
PS Функция PrintData естественно описанна в JS.
Вобщем кто МОЖЕТ СКАЗАТЬ чтоможет быть опасного в возврате прямых команд на JS?
Возможно если скрипт, напрямую кидает код
$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.response Text);Тем более, что нет смысла исполнять код 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? Интересно...
Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.
EST a1ien
21.05.2008, 22:54
P.S. A можно посмотреть на функцию PrintData? Интересно...
Лучше ненадо я ее уже переписал а функция была примитивнейшая.
Вобщем не буду я позориться. Просто я хотел узнать вчем прикол. Как всегда все опасно если не фильтровать.
astrologer
21.05.2008, 22:55
Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.Конечно, дело не в опасности и не в скорости – важно использовать для каждого случая подходящие методы.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot