Ajax и безопасность. Маленький вопрос.

Discussion in 'PHP' started by EST a1ien, 21 May 2008.

  1. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Такой вопрос.
    Везде в инете пишут что небезопасно передавать именно готовый java скрипт по запросу.
    тоесть вот так.
    Code:
    response=req.responseText;
    			message   = document.getElementById(Field);
    			eval(response);	
    
    якобы небезапасно(ну если передать сюда именно скрипт)
    например.
    А например вот что возвращает сервер.
    Code:
    PrintData(message,'t7','Логин свободен.');
    И что может быть опасного я реально непонимаю.

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

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Возможно если скрипт, напрямую кидает код
    $answer = "<script> document.getElementById({$id})</script>";
    И отправилиб допустим через какуето функцию AddScript();

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

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Это может быть опасно, если в ответе содержатся данные, каким-либо образом поступившие от пользователя. Другое дело, что в большинстве случаев eval не нужен.
    Приведённый пример это демонстрирует. Вместо того, чтобы возвращать JS-код и исполнять его:
    Code:
    eval("PrintData(message,'t7','Логин свободен.');");
    можно возвращать с сервера только нужные данные (в данном случае - сообщение "Логин свободен.") и вызывать функцию:
    Code:
    PrintData(message,'t7',req.responseText);
    Тем более, что нет смысла исполнять код eval("PrintData(message...)");, если message всё равно определяется в JS. Кроме того, такой код будет сложнее поддерживать - если нужно будет изменить JS, то придётся редактировать и серверный код, поскольку там дублируются имена переменных.

    Ах, да. Ещё eval – это зло :) .
     
    #3 astrologer, 21 May 2008
    Last edited: 21 May 2008
    1 person likes this.
  4. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Если бы передавалось только сообщение то естественно его бы и писал. А там в зависимости от многих параметров. Вот и получается чем писать для некоторых отдельных случаев функцию проще вернуть. что надо делать.
    Да и это так пока очень сильно черновой вариант.
    И почему же евал зло? Он во всяком случае в некоторых местах даже быстрее работает.
    если надо передавать неочень большой обем данных до и через Xml его тоже неочень хорошо передавать.
     
  5. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Если заранее обдумать логику приложения, такого не будет. PHP ни к чему знать имена функций JS.
    Смайлик там не просто так :).
    Разумеется, JSON – тот случай, когда eval действительно оправдан.

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

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Я во всех своих скриптах с AJAX использовал eval() всегда, не вижу ничего опасного в этом. Просто нужно следить, чтобы сервер всегда возвращал корректный JavaScript-код.
     
  7. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Лучше ненадо я ее уже переписал а функция была примитивнейшая.
    Вобщем не буду я позориться. Просто я хотел узнать вчем прикол. Как всегда все опасно если не фильтровать.
     
    1 person likes this.
  8. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Конечно, дело не в опасности и не в скорости – важно использовать для каждого случая подходящие методы.
     
    1 person likes this.