Почему не eval () JSON? - PullRequest
       54

Почему не eval () JSON?

8 голосов
/ 24 ноября 2010

Насколько я знаю, eval() JSON-объекты в JavaScript считаются плохой практикой из-за безопасности. Я могу понять эту проблему, если JSON приходит с другого сервера.

Но если JSON предоставлен моим собственным сервером и создан с использованием PHP json_encode (допустим, он не глючит), допустимо просто использовать eval() для чтения JSON в JS или есть проблема безопасности, о которой я сейчас не думаю?

Я действительно не хочу иметь дело с динамической загрузкой парсера JSON и был бы рад просто использовать eval().

PS: Я, очевидно, буду использовать нативный JSON объект, если он доступен, но хочу вернуться к eval() для IE / Opera.

Ответы [ 6 ]

9 голосов
/ 24 ноября 2010

В вашем сценарии возникает вопрос: откуда PHP получает javascript для выполнения?Является ли этот канал безопасным и свободным от возможных манипуляций с пользователем?Что если вы не контролируете этот канал напрямую?

7 голосов
/ 24 ноября 2010

Существует несколько способов, которые могут поставить под угрозу вашу безопасность.

  • Человек в середине атаки теоретически может изменить содержимое данных, доставляемых клиенту.
  • Ваш серверный трафик может быть перехвачен в другом месте, и может быть предоставлен другой контент (не такой, как атака MIM)
  • Ваш сервер может быть взломан, а источник данных может быть подделан.

и это только простые примеры. XSS противный.

«Унция профилактики стоит фунта лечения»

3 голосов
/ 24 ноября 2010

Помимо очевидных проблем безопасности:

  1. Собственный JSON быстрее
  2. Вам не нужно «загружать» анализатор JSON, это просто еще один вызов функции для механизма JavaScript
0 голосов
/ 08 декабря 2010

Серьезно?Некоторые из парней здесь параноики.Если вы поставляете JSON и знаете, что он безопасен , можно использовать fallback (*) до eval(); вместо js lib для IE.В конце концов, пользователям IE есть куда больше беспокоиться.

А аргумент "человек посередине" - это чушь * t.

(*) слова fallback и сейф выделены жирным шрифтом, потому что некоторые люди здесь их не видели.

0 голосов
/ 24 ноября 2010

проверьте это: http://blog.mozilla.com/webdev/2009/02/12/native-json-in-firefox-31/

, так что по крайней мере для Firefox вы можете использовать встроенный анализатор json

0 голосов
/ 24 ноября 2010

Совет: в asp.net использование JSON считается плохим, потому что разбор DateTime отличается между сервером и клиентом, поэтому мы используем специальную функцию для десериализации даты в javascript.Я не уверен, что у PHP такая же проблема, но стоит упомянуть.

...