Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Безопасный Javascript


Автор: Knuckles 12.10.2008, 09:15
Всем привет.
Мне как кандидату на работу дали тестовое задание. Звучит так:

Есть форма с набором инпутов, которые необходимо проверить перед отправкой, некоторые поля просто должны быть непустыми, а некоторые должны содержать email.
...
Особенности реализации:
Обработчик события должен должен быть один на всю форму. При создании функционала следует придерживаться "безопасного javascript" - сама html страница не должна содержать инлайнового javascript.

Я не совсем понял, что такое "безопасный javascript". Даже если скрипт находится в отдельном файле, в самом html должны быть привязки событий элементов ввода к функциям проверки, которые сами вообще-то являются скриптами. То есть если я пишу <input type="text" onkeypress="check()">, то значение атрибута onkeypress выполняется как скрипт. Уточнять у работодателя не хочется, чтобы не показаться полным нубом, да и времени нет (хотелось бы сделать задание сегодня).
Гугл на такой общий запрос дает конечно же не то, что нужно. Подскажите, что имелось ввиду. Заранее спасибо smile

Автор: bars80080 12.10.2008, 09:27
Цитата(Knuckles @  12.10.2008,  09:15 Найти цитируемый пост)
что такое "безопасный javascript"

максимально удалённый от копания в нём чужих ручек, ибо полностью безопасного, конечно, достичь нельзя

Автор: Knuckles 12.10.2008, 09:31
Цитата(bars80080 @  12.10.2008,  09:27 Найти цитируемый пост)
максимально удалённый от копания в нём чужих ручек

А можно подробнее? И как это относится к inline Javascript?

Автор: skyboy 12.10.2008, 09:58
Knuckles, приходит в голову только добавка обраобтчиков через addEventListener/attachEvent. но если код "привязывания" обработчика к форме будет находиться в скрипте, подключенном через <script src="...">, то как определить, что тело уже загружено? можно, в принципе, поставить setInterval, чтоб проверяло: если в DOM-дереве появился элемент с заранее известным id(форма), то цеплять обработчик. если не появился - ждать дальше. А может, скрипт в head'e выполнится только после загрузки страницы... я не уверен, надо проверять.

Автор: bars80080 12.10.2008, 10:20
Цитата(Knuckles @  12.10.2008,  09:31 Найти цитируемый пост)
 как это относится к inline Javascript? 

а фиг его знает, может это сильно проффессионально заданный вопрос, но для меня inline - это расположение элементов в строчку. никогда с js не связывал

по-моему, надо просто написать нормальный простой обработчик, затем может пропустить через некий оптимизатор, дабы усложнить читаемость кода и засунуть в отдельный файл. потом можно накидать обманок (но, имхо, это уже и есть нубство)
далле следует рассказать работодателю, что мол, javascript на 100% безопасным не сделаешь, и по любому решающую проверку нужно делать на сервере, а js использовать только в качестве предупредительной системы, чтобы обычный пользователь чего-нибудь не забыл


Автор: Knuckles 12.10.2008, 10:23
skyboy, да я тоже думал над этим. В принципе можно повесить функцию привязки обработчиков на события DOMContentLoaded (для Mozilla), onload с аттрибутом defer (для IE)  и без defer  для остальных. В общем, я надеюсь, это именно то, что от меня ожидается smile

Добавлено через 6 минут и 42 секунды
bars80080, насколько я понимаю, inline javascript это встраивание скрипта прямо в код html. Считается дурным тоном по некоторым причинам.
В любом случае, всем спасибо за мысли и предложения.

Автор: skyboy 12.10.2008, 16:01
Цитата(Knuckles @  12.10.2008,  09:23 Найти цитируемый пост)
Считается дурным тоном по некоторым причинам.

в любом случае, сильно упрощает отладку. а вопросы безопасности решать на стороне клиента - вообще странно. на стороне клиента могут быть механизмы, для упрощения работы пользователя, да. но шифровать валидацию формы и игнорировать проверку на стоорне сервера - как-то по-детски.

Автор: Knuckles 12.10.2008, 16:23
Цитата(skyboy @  12.10.2008,  16:01 Найти цитируемый пост)
вопросы безопасности решать на стороне клиента - вообще странно. на стороне клиента могут быть механизмы, для упрощения работы пользователя, да. но шифровать валидацию формы и игнорировать проверку на стоорне сервера - как-то по-детски. 

Никто и не спорит. Проверка ввода на стороне пользователя снижает нагрузку на сервер при частом вводе неверных данных. При количестве пользователей в пару десятков тысач это заметно. Заодно клиенту не нужно ждать ответа сервера с валидацией и перезагружать страницу. Проверка на сервере делается в любом случае.

Автор: nerezus 16.11.2008, 11:44
[humour]
Безопасный JS - это когда он используется нен в браузере IE
[/humour]

Автор: bars80080 16.11.2008, 15:29
Цитата(nerezus @  16.11.2008,  10:44 Найти цитируемый пост)
Безопасный JS - это когда он используется нен в браузере IE

на шутку даже близко не тянет, учитывая установленный в базовой версии ФФ инспектор DOM, который позволяет править любые значения страницы, не оглядываясь на разработчиков

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)