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

Eval против JSON.parse

11.11.2025, 17:46. Показов 2621. Ответов 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
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,369
15.02.2026, 09:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 755 Посмотреть сообщение
Но, когда попробовал использовать через аякс данную конструкция выполнить код не получилось.
Кто про что... А вшивый про баню.

Цитата Сообщение от 755 Посмотреть сообщение
думаю запустить некий секретный код, который извне нельзя будет увидеть и соответственно узнать, что он выполнил.
Такие "коды" нужно запускать на сервере.
А клиенту передавать лишь результат. А это какие-то данные.
0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
15.02.2026, 12:55  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Такие "коды" нужно запускать на сервере.
А клиенту передавать лишь результат. А это какие-то данные.
krvsa, решил Вас не обижать, поэтому напишу кратко: Вы очень категоричны, и тем самым не допускаете возможность других вариантов. Например, кроме данных, могут быть какие-либо действия. Правда, их результатом могут быть данные, но не обязательно. Возможно и еще что-то, что уже я не вижу.
0
 Аватар для voraa
1294 / 1271 / 190
Регистрация: 21.01.2024
Сообщений: 5,884
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,504
Записей в блоге: 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,504
Записей в блоге: 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,504
Записей в блоге: 2
15.02.2026, 14:29
Цитата Сообщение от 755 Посмотреть сообщение
Но есть еще вариант: неизвестно откуда появилась переменная, непонятно что содержит, самое главное, непонятно ее назначение. И в общей массе других переменных на нее можно и не обратить внимание.
Это будет признаком отвратительного кода, архитектуры и всего прочего. Что значит "не известно откуда"?
0
213 / 74 / 19
Регистрация: 29.02.2016
Сообщений: 383
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
3847 / 1709 / 431
Регистрация: 14.03.2022
Сообщений: 4,369
15.02.2026, 15:47
Цитата Сообщение от 755 Посмотреть сообщение
Например, кроме данных, могут быть какие-либо действия. Правда, их результатом могут быть данные, но не обязательно. Возможно и еще что-то, что уже я не вижу.
Где примеры?
Какие еще действия должны выполняться после того "секретного кода"?
Если они не секретные - их можно подключить обычным <script></script>...

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

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

Добавлено через 6 минут
Цитата Сообщение от 755 Посмотреть сообщение
Но есть еще, например, такой вариант: неизвестно откуда появилась переменная, непонятно что содержит, самое главное, неизвестно и соответственно непонятно ее назначение. И в общей массе других переменных на нее можно и не обратить внимание. (увы, как понял, пока нереализуемый)
Цитата Сообщение от voral Посмотреть сообщение
Это будет признаком отвратительного кода, архитектуры и всего прочего. Что значит "не известно откуда"?
Цитата Сообщение от 755 Посмотреть сообщение
Зато, возможно, интересным дополнительным решением по защите сайта. Подчеркиваю, возможно.
Бесполезно...
1
 Аватар для voraa
1294 / 1271 / 190
Регистрация: 21.01.2024
Сообщений: 5,884
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
213 / 74 / 19
Регистрация: 29.02.2016
Сообщений: 383
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
1294 / 1271 / 190
Регистрация: 21.01.2024
Сообщений: 5,884
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
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru