Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407

Eval против JSON.parse

11.11.2025, 17:46. Показов 2741. Ответов 78
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сразу скажу, использовал оба метода, переключился на JSON.parse пожалуй больше из соображений более быстрого написания кода на php (хотя и повлияла встреченная где-то фраза, что eval работает медленно).

Но сейчас решил разобраться из чисто теоретического интереса: почему плохо и плохо ли использование eval в таком применении:

В php формируется строка типа:
PHP
1
2
$st= 'let m_el = ["знач. 1","знач. 2","знач. 3", ...];
echo $st;
=>
js
JavaScript
1
eval.call(window, xmlHttp.responseText);
По-моему понятно, что передается строка через аякс - js ее получает из надежного источника, выполняется код и формируется в данном случае массив.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2025, 17:46
Ответы с готовыми решениями:

Отловить ошибку в JSON.parse (переварить не JSON)
получаю ajax ответ от сервера, это строка json. Если на сервере скрипт падает, например по...

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
Всем привет, пытаюсь произвести запрос к обработчику c помощью AJAX, выдает ошибку при парсинге...

Проверка валидности разбора JSON (JSON.parse)
Пытаюсь разобрать некорректную json строку вот так: var response = JSON.parse(data); Как...

78
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3857 / 1744 / 432
Регистрация: 14.03.2022
Сообщений: 4,435
15.02.2026, 09:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 755 Посмотреть сообщение
Но, когда попробовал использовать через аякс данную конструкция выполнить код не получилось.
Кто про что... А вшивый про баню.

Цитата Сообщение от 755 Посмотреть сообщение
думаю запустить некий секретный код, который извне нельзя будет увидеть и соответственно узнать, что он выполнил.
Такие "коды" нужно запускать на сервере.
А клиенту передавать лишь результат. А это какие-то данные.
0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 12:55  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Такие "коды" нужно запускать на сервере.
А клиенту передавать лишь результат. А это какие-то данные.
krvsa, решил Вас не обижать, поэтому напишу кратко: Вы очень категоричны, и тем самым не допускаете возможность других вариантов. Например, кроме данных, могут быть какие-либо действия. Правда, их результатом могут быть данные, но не обязательно. Возможно и еще что-то, что уже я не вижу.
0
 Аватар для voraa
1296 / 1282 / 190
Регистрация: 21.01.2024
Сообщений: 5,935
15.02.2026, 13:16
Цитата Сообщение от 755 Посмотреть сообщение
Например, кроме данных, могут быть какие-либо действия.
Все возможные действия, которые может/должен выполнять фронт (браузер) должны быть в нем и предусмотрены. Сервер может в этом случае только послать информацию (данные), какое действие должен выполнить браузер. Иначе, если сервер будет посылать само действие, то не зная как устроено все в скриптах браузера (а он и не должен знать) может получиться так, что браузер не сможет это выполнить и скрипт ляжет из-за ошибок.
Еще раз. Скрипты на сервере и на клиенте должны быть независимы друг от друга. Связь только по данным. Разработчик может как угодно менять серверный скрипт, не трогая браузерный, лишь бы посылались нужные данные. Можно менять как угодно браузерные скрипты, не думая, что там на сервере, лишь бы данные правильно обрабатывались.

Добавлено через 5 минут
В браузере нет никакой "секретности". Все, что приходит по сети в браузер может видеть кто угодно. Даже если это "зашифрованные" данные, то проходя в отладчике по шагам исполнение кода, можно дойти до места, где они будут "расшифрованы".
0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 13:34  [ТС]
voraa, просто привел пример, что кроме данных возможно на мой пока еще неопытный взгляд выполнение действия на клиенте (причем я думал и о первом и о втором). Ранее считал через eval. После вчерашних комментариев понял так, что возможно с использованием <script>. Ну а еще вчера увидел, возможно (пока не проверил) , иной вариант выполнения кода (думаю, о нем не упоминалось на форумах. Хотя, как говорится, "ничто не ново под луной")

Цитата Сообщение от voraa Посмотреть сообщение
Иначе, если сервер будет посылать само действие, то не зная как устроено все в скриптах браузера (а он и не должен знать) может получиться так, что браузер не сможет это выполнить и скрипт ляжет из-за ошибок.
Не понимаю, если я являюсь разработчиком, почему я не могу выполнить действие на стороне клиента. В частности через eval я уже проверял и одно действие выполнилось с результатом так как надо.

Цитата Сообщение от voraa Посмотреть сообщение
В браузере нет никакой "секретности". Все, что приходит по сети в браузер может видеть кто угодно. Даже если это "зашифрованные" данные, то проходя в отладчике по шагам исполнение кода, можно дойти до места, где они будут "расшифрованы".
Да, я это уже понял после комментария voral. После этого поинтересовался, оказалось что не первый, кто задумывался над данным вопросом - только, думаю, у нас разные мотивы - мой защитить сайт от возможного проникновения, а точнее от получения доступа к чужим данным. Хотя и приводили примеры методов усложнить доступ к получению кода. Но как кто-то написал и php файл можно прочитать: "Допустим, вы беспокоитесь о том, что секретная информация может быть раскрыта. Допустим, вы помещаете ее в PHP-файл и вызываете его через Ajax. Тогда любой может вызвать этот PHP-файл и узнать секрет." - не знаю, насколько это соответствует действительности, но принял к сведению.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
15.02.2026, 14:02
Цитата Сообщение от 755 Посмотреть сообщение
Но как кто-то написал и php файл можно прочитать: "Допустим, вы беспокоитесь о том, что секретная информация может быть раскрыта. Допустим, вы помещаете ее в PHP-файл и вызываете его через Ajax. Тогда любой может вызвать этот PHP-файл и узнать секрет." - не знаю, насколько это соответствует действительности, но принял к сведению.
Если у вас есть необходимость передавать в браузер секретные данные, то для этого используются совершенно другие методы. И с кодом они связанны лишь косвенно.

Аутентификация, авторизация, https. Чужие данные закрываются исключительно разграничением прав доступа на стороне бекенда. JS тут вообще не при чем (если конечно вы не решите бек перевести на js + node.js). Если у вас фронт начинает заниматься ограничением доступа к данным - это значит, что данные уже публичны.

Добавлено через 7 минут
Цитата Сообщение от 755 Посмотреть сообщение
Допустим, вы беспокоитесь о том, что секретная информация может быть раскрыта. Допустим, вы помещаете ее в PHP-файл и вызываете его через Ajax. Тогда любой может вызвать этот PHP-файл и узнать секрет
Если быть точным, "если PHP файл возвращает этот секрет". вот оба варианта содержат секрет:

1. вариант. тоже "не совсем" безопасен. если вы где сделаете дыру позволяющую, прочитать содержимое любого файла на вашем сервере, или, даже собьете настройки вашего сервера и все php файлы будут отдаваться как есть, а не отправляться интерпретатору php
PHP
1
2
<?php
$secret = "TopSecret";
2. А вот тут уже действительно любой, у кого есть доступ для обращение к этому файлу. и тут уже ваша задача, обеспечить разграничение прав тем или иным способом.
PHP
1
2
3
<?php
$secret = "TopSecret";
echo  $secret;
Т.е. если на уровне псевдкода должно быть

PHP
1
2
3
4
5
6
7
8
9
10
<?php
$currentUserHasAccess = ФункцияОпределяющаяИмеетЛиПравоНаДоступТекущийПосетитель();
if (!$currentUserHasAccess) {
   // шлем ответ с статусом 403 
   die();
}
 
 
$secret = "TopSecret";
echo  $secret;
1
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 14:11  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Если у вас есть необходимость передавать в браузер секретные данные,
Секретные данные как вариант можно зашифровать. Думал сделать секретом не сами данные, а их существование.

Цитата Сообщение от voral Посмотреть сообщение
если конечно вы не решите бек перевести на js + node.js
Да, подумал, не стоит ли в перспективе изучить node.js (когда интересовался, можно ли работать с файловой системой на компьютере Пользователя)

Спасибо, voral, но пока все это только в мыслях, как говорится думаю над алгоритмом - на первом этапе постараюсь минимизировать работу с персональными данными, а, если получится, вообще избежать их.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
15.02.2026, 14:17
Цитата Сообщение от 755 Посмотреть сообщение
Секретные данные как вариант можно зашифровать. Думал сделать секретом не сами данные, а их существование.
Можно, но смысла в этом нет если речь идет об обмене с браузером. Они должны в принципе отдаваться только тому, кто имеет право их видеть, а значит: какой смысл в шифровании?

По сути шифрование может быть полезным если:
1. Передаете некие данные которые есть необходимость хранить в куках или localStorage. Но расшифровывать на фронте их НЕ надо. Т.е. когда потребуется так же в зашифрованном виде фронт их передает на бек, на бек производится дешифровка (ну или сверка по хешу)

2. если вы создаете АПИ, т.е. запрос выполняет не браузер, а другой сервер, т.е. "абы кто" не видит как это все используется и дешефруется.
0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 14:26  [ТС]
Спасибо, voral, за добавленные примеры. Повторюсь, пока в этом нет необходимости.

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

Добавлено через 6 минут
Цитата Сообщение от voral Посмотреть сообщение
По сути шифрование может быть полезным если:
1. Передаете некие данные которые есть необходимость хранить в куках или localStorage. Но расшифровывать на фронте их НЕ надо. Т.е. когда потребуется так же в зашифрованном виде фронт их передает на бек, на бек производится дешифровка (ну или сверка по хешу)
Да, конечно, это естественный напрашиваемый алгоритм.

Но есть еще, например, такой вариант: неизвестно откуда появилась переменная, непонятно что содержит, самое главное, неизвестно и соответственно непонятно ее назначение. И в общей массе других переменных на нее можно и не обратить внимание. (увы, как понял, пока нереализуемый)
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
15.02.2026, 14:29
Цитата Сообщение от 755 Посмотреть сообщение
Но есть еще вариант: неизвестно откуда появилась переменная, непонятно что содержит, самое главное, непонятно ее назначение. И в общей массе других переменных на нее можно и не обратить внимание.
Это будет признаком отвратительного кода, архитектуры и всего прочего. Что значит "не известно откуда"?
0
232 / 94 / 22
Регистрация: 29.02.2016
Сообщений: 486
15.02.2026, 14:33
Цитата Сообщение от voral Посмотреть сообщение
Это будет признаком отвратительного кода, архитектуры и всего прочего.
Код надо сразу писать обфусцированным и минифицированным. А сопровождение отдвать на аутсорц. Шутка.
0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 14:40  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Это будет признаком отвратительного кода, архитектуры и всего прочего
Зато, возможно, интересным дополнительным решением по защите сайта. Подчеркиваю, возможно.
Цитата Сообщение от voral Посмотреть сообщение
Что значит "не известно откуда"?
Об этом писал ранее: если можно было бы скрыть код, например до вчерашнего дня думал так: eval создал бы такую переменную, а потом код, ее создавший, был бы удален. Переменная появилась бы, а откуда и когда - неизвестно.

Добавлено через 3 минуты
М.б. об этом правильнее не следовало бы писать, но, решил, что мне не жалко (даже, если и реализую) - придумаю еще что-нибудь.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3857 / 1744 / 432
Регистрация: 14.03.2022
Сообщений: 4,435
15.02.2026, 15:47
Цитата Сообщение от 755 Посмотреть сообщение
Например, кроме данных, могут быть какие-либо действия. Правда, их результатом могут быть данные, но не обязательно. Возможно и еще что-то, что уже я не вижу.
Где примеры?
Какие еще действия должны выполняться после того "секретного кода"?
Если они не секретные - их можно подключить обычным <script></script>...

Цитата Сообщение от 755 Посмотреть сообщение
Вы очень категоричны, и тем самым не допускаете возможность других вариантов.
Ты по прежнему блуждаешь в своих потемках и не видишь нормальных решений. Они для тебя слишком просты и не достойны внимания.

Добавлено через 1 минуту
Цитата Сообщение от 755 Посмотреть сообщение
Не понимаю, если я являюсь разработчиком, почему я не могу выполнить действие на стороне клиента. В частности через eval я уже проверял и одно действие выполнилось с результатом так как надо.
Ты волен действовать как тебе угодно...
Но тем самым ты сам создаешь себе проблемы. Именно про это тебе и пишем. Только проку в этом 0.

Добавлено через 6 минут
Цитата Сообщение от 755 Посмотреть сообщение
Но есть еще, например, такой вариант: неизвестно откуда появилась переменная, непонятно что содержит, самое главное, неизвестно и соответственно непонятно ее назначение. И в общей массе других переменных на нее можно и не обратить внимание. (увы, как понял, пока нереализуемый)
Цитата Сообщение от voral Посмотреть сообщение
Это будет признаком отвратительного кода, архитектуры и всего прочего. Что значит "не известно откуда"?
Цитата Сообщение от 755 Посмотреть сообщение
Зато, возможно, интересным дополнительным решением по защите сайта. Подчеркиваю, возможно.
Бесполезно...
1
 Аватар для voraa
1296 / 1282 / 190
Регистрация: 21.01.2024
Сообщений: 5,935
15.02.2026, 16:20
Цитата Сообщение от 755 Посмотреть сообщение
если я являюсь разработчиком, почему я не могу выполнить действие на стороне клиента.
Всегда надо думать о дальнейшем сопровождении. Если вы пишите что то исключительно для себя и потом готовы сами, вечно сопровождать свой код, то пишите как хотите. Никого даже не заинтересует работает у вас что или нет. Но если вы спрашиваете у других как надо, то и ответы получаете соответственные. И не ждите, что те, кто пишет производственный код и работает в команде будут соглашаться со всеми вашими наворотами и заворотами.

Добавлено через 3 минуты
Цитата Сообщение от 755 Посмотреть сообщение
у нас разные мотивы - мой защитить сайт от возможного проникновения, а точнее от получения доступа к чужим данным.
Для этого есть вполне нормальные средства на сервере.
Просто надо погуглить и почитать, как это делается.
1
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 18:32  [ТС]
Спасибо всем за советы и потраченное время. Думаю, по последним комментариям вопросов нет.

Начну заниматься защитой, тогда вернусь к возможности использования <script>:
Цитата Сообщение от krvsa Посмотреть сообщение
Какие еще действия должны выполняться после того "секретного кода"?
Если они не секретные - их можно подключить обычным <script></script>...
А по поводу "секретного кода" - пока и сам не придумал, какие - есть только некоторые соображения.
0
232 / 94 / 22
Регистрация: 29.02.2016
Сообщений: 486
15.02.2026, 18:38
Цитата Сообщение от 755 Посмотреть сообщение
пока и сам не придумал
Не надо ни чего придумывать. Всё уже придумано - Обфускация.
0
15.02.2026, 18:51

Не по теме:

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

0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 18:59  [ТС]
Цитата Сообщение от stele Посмотреть сообщение
Не надо ни чего придумывать. Всё уже придумано - Обфускация.
Во-первых, как читал, Обфускация, особенно первого уровня, несильно помогает. Во-вторых, пихать какой-то левый код, чтобы сбить с толку - мне лично не очень нравится. Кроме того - это не вид защиты информации, а усложнений кода для понимания. Минификатор и свой начал писать, хотя наверняка по уровню защиты он не сравнится с профессиональными. (да на это и не претендую - просто интересно. А м.б. и что-то будет свое более удобное)

И одно другому не помешает, если будет многоуровневая защита конфиденциальной информации.

Добавлено через 4 минуты
Цитата Сообщение от gogolik Посмотреть сообщение
Я иной раз поражаюсь, как люди придумывают сами себе велосипед, а потом героически пытаются его решить...
Когда это не является работой и от этого получаешь удовольствие ... можно придумывать что угодно. А мне повезло - никогда не относился к программированию как к работе.
0
 Аватар для voraa
1296 / 1282 / 190
Регистрация: 21.01.2024
Сообщений: 5,935
15.02.2026, 19:33
Лучший ответ Сообщение было отмечено voral как решение

Решение

Цитата Сообщение от 755 Посмотреть сообщение
Минификатор и свой начал писать, хотя наверняка по уровню защиты он не сравнится с профессиональными.
Минификаторы не являются никакой защитой. Только для уменьшения объема.
Даже с лучшим минификатором любая нормальная ИДЕ покажет структуру кода, с разбивкой строк по операторам, с отступами, а ИИ и имена переменным вполне читаемые даст.
И писать "свой" минификатор вам совсем не рекомендуется. Для нормальной минификации надо точно знать синтаксис js, учитывать области видимости, понимать из семантики, что можно минифицировать, что нельзя. Просто убрать пробелы - это не минификация.
Цитата Сообщение от 755 Посмотреть сообщение
И одно другому не помешает, если будет многоуровневая защита конфиденциальной информации.
Это мартышкин труд, а не защита.
Цитата Сообщение от 755 Посмотреть сообщение
А мне повезло - никогда не относился к программированию как к работе.
А зачем тогда спрашивать что то. Просто получайте удовольствие от процесса, а не результата. Не так же важно, работает или нет. Цель - ничто, движение все. Еще можно получать удовольствие от самостоятельного нахождения косяков в своем коде.
3
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 20:17  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Для нормальной минификации надо точно знать синтаксис js, учитывать области видимости, понимать из семантики, что можно минифицировать, что нельзя. Просто убрать пробелы - это не минификация.
Пробелы и комментарии убрать элементарно (это было сделано достаточно быстро). А вот именно и хотел проделать работу с переменными и функциями. И область видимости это не такая уж и проблема. Гораздо сложнее оказалось учесть то, что имена переменных могут формироваться динамически.
И не только ради удовольствия, но и чтобы облегчить написание кода и не задумываться об областях видимости - а формировать их динамически как раз в минификаторе.
Но все это не так важно и не стоит того, чтобы это обсуждать.

Добавлено через 6 минут
Цитата Сообщение от voraa Посмотреть сообщение
А зачем тогда спрашивать что то. Просто получайте удовольствие от процесса, а не результата. Не так же важно, работает или нет. Цель - ничто, движение все.
По-моему понятно, что есть и цель, причем очень серьезная. Как говорил один герой: Выпьем за то, чтобы наши желания всегда совпадали с нашими возможностями.
Вот и у меня, прекрасно когда есть цель и от этого получаешь двойной удовольствие.

В любом случае благодарю и на этом прощаюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2026, 20:17

Код 200 SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Ребята подскажите плиз, пытаюсь добавить форму отправки сообщений на сайт. После отправки выдает...

Постоянная ошибка SyntaxError: JSON.parse: unterminated string at line 1 column 132829 of the JSON data
что бы не делал, нормально в консоле JSON не выводит, нужно раз 20 обновить только тогда выведет...

SyntaxError: JSON.parse: unexpected character at line 2 column 5 of the JSON data
Здравствуйте. у меня есть простая задачка, которую никак не получается решить. Есть 2 файла в...

Ошибка "json.parse unexpected character"
Реализую на сайте систему комментариев. Добавление комментариев в базу происходит путём передачи...

Не работает JSON.parse, ошибка Unexpected token o
подскажите пожалуйста почему может не работать: var obj=JSON.parse (&lt;?=$Arrbankomat?&gt;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
79
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru