Может ли браузер JavaScript повредить мой сервер? - PullRequest
3 голосов
/ 30 сентября 2010

Я кодирую приложение, в котором я хочу позволить пользователю изучать javascript следующим образом:

  1. Пользователь пишет код JavaScript в браузере, как в IDE.
  2. Пользователь сохраняет его, и код будет сохранен в виде строки в моей внутренней базе данных No-SQL (MongoDB / CouchDB).
  3. Пользователь открывает приложение несколько дней спустя, и я передаю эту строку в веб-браузер, где код будет выполняться с помощью eval ().

Между внутренним сервером и веб-браузером будут передаваться только данные JSON. Сервер не будет ничего делать со строкой кода, он только сохранит ее непосредственно в базе данных.

Может ли этот код нанести какой-либо ущерб на стороне сервера?

Ответы [ 5 ]

3 голосов
/ 30 сентября 2010

На server-side нет. Если только скрипты не запускаются в IE и не создают несколько файлов на диске. Или сделайте запрос к вашей системе, добавив миллиарды новых записей ...

Таким образом, вы должны заботиться о запросах (управление потоком данных), быть осторожным с IE и быть осторожным с SQL-инъекциями.

Примеры * * 1 006

И запрос, о котором я говорю, может быть что-то вроде:

ajax.post("page_save_js.ext", "code=flood");

Затем при каждом запуске он вставляет новый код, заполняя сервер. StackOverflow управляет этим потоком, используя капчу после некоторых запросов за короткий промежуток времени.

2 голосов
/ 30 сентября 2010

Использование базы данных nosql только делает вас неуязвимым для «SQL-инъекций», но есть очень похожие векторы атаки QL-инъекциями.Таким образом, вам все еще нужно экранировать свои данные или использовать API-интерфейсы для защиты данных (эквивалент подготовленных операторов в мире SQL).

Некоторые примеры NOSQL-инъекций приведены в http://www.kalzumeus.com/2010/09/22/security-lessons-learned-from-the-diaspora-launch/ (Поиск по запросу "NoSQL не означает «SQL-инъекцию» на этой странице).

Для клиентской стороны: если возможно, вы должны убедиться, что java-скрипт доставляется только тому пользователю, который его загрузил, если только ему не доверяют.Это включает проверку CSRF в форме входа в систему. В прошлом это не удавалось.

2 голосов
/ 30 сентября 2010

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

Однако, если вы предоставляете конфиденциальную информацию на странице (скрытую или иную) или разрешаете javascript выполнять вызовы ajax в методах вашего сервера, они могутбыть вопросы безопасности.

2 голосов
/ 30 сентября 2010

каждый раз, когда вы принимаете ввод от пользователя, вы должны проверить, чтобы убедиться, что он не содержит таких вещей, как SQL инъекция или JS инъекция.

Так что это может быть опасно для вашего сервера (SQL инъекция может стереть / выводваш db) и вашим пользователям (js инъекция может отправить их на гнусные сайты)

2 голосов
/ 30 сентября 2010

Это не принесет никакого вреда, если его просто сохранить в виде строки в БД.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...